2011-03-17 17 views
5

Estoy tratando de aplicar un filtro (ApplyFilter) en una columna que se une (y se proyecta) desde otra tabla. Tengo la siguiente entidad:Fluent Nhibernate ApplyFilter on Join column

public class User 
{ 
    public virtual int Id { get; private set; } 
    public virtual string EMail { get; set; } 
    ... 
    public virtual bool IsActive { get; set; } 
    public virtual int CompanyId { get; set; } 
} 

Con un usermap:

public class UserMap : ClassMap<User> 
{ 
    public UserMap() 
    { 
     Table("Users"); 
     Id(x => x.Id, "UserId"); 
     Map(x => x.EMail); 
     ... 

     Join("CompanyUser", r => 
     { 
      r.KeyColumn("UserId"); 
      r.Map(x => x.IsActive); 
      r.Map(x => x.CompanyId); 
      r.Fetch.Join(); 

     }); 

     ApplyFilter<CompanyFilter>("this_1_.CompanyId = :companyId"); 
    } 

En realidad, esto funciona en este momento, pero como se puede ver que estoy tener que incluir el nombre de alias "this_1_" para el CompanyUser mesa en el filtro ... esto no suena correcto, pero si dejo el filtro como se define en la clase FilterDefinition me sale un SQL con un:

where this.CompanyId = ?p0 

que no está asignada 'porque la columna de la CompanyID do omes de una proyección diferente (CompanyUser como this_1_)

¿Hay alguna manera de corregir esto y dejar que nhibernate descubra el alias correcto para el filtro?

Gracias de antemano por cualquier ayuda.

+0

Me encantaría saber la respuesta a esto también. ¿Has encontrado una mejor solución? – pauldunlop

+0

¿Alguna solución hoy? – RMalke

+0

@RenanMalkeStigliani No, terminé viviendo con eso por el momento, no he encontrado una solución ... Me aseguraré de publicarlo aquí si lo encuentro – Jaime

Respuesta

0

creo que debe aplicar el filtro en la unión:

Join("CompanyUser", r => 
    { 
     r.KeyColumn("UserId"); 
     r.Map(x => x.IsActive); 
     r.Map(x => x.CompanyId); 
     r.Fetch.Join(); 

    }).ApplyFilter<CompanyFilter>("CompanyId = :companyId"); 
+0

Gracias por la respuesta, estoy no estoy seguro de que esto resuelva mi problema, la referencia "this_1_.CompanyId" está codificada en la clase de mapeo ... así que cuando me una al usuario con otras entidades que tienen companyId, el elemento "this_1_.companyId" debe ser "this_2_" ... – Jaime

+0

¿Puedes probar la nueva versión (después de mi edición)? Creo que NHibernate analiza el filtro y agrega el alias correcto cuando es necesario. –

Cuestiones relacionadas