2013-07-01 32 views
0

我認爲我遇到了一個錯誤地應用於不應該關聯的篩選器的問題。這裏是我的對象:錯誤地應用於子關係的篩選器

public enum Capability 
{ 
Create = 1, 
Edit = 2, 
Delete = 3 
} 

public class Role 
{ 
public virtual int TenantId {get;set; 
public virtual IList<Capability> Capabilities { get; set; } 
} 

下面是一個映射覆蓋:

public class RoleOverride : IAutoMappingOverride<Role> 
{ 
    public void Override(AutoMapping<Role> mapping) 
    { 
     mapping.HasMany(x => x.Capabilities) 
       .Cascade.All() 
       .Table("RoleCapability") 
       .Element("CapabilityId", e => e.Type<NHibernate.Type.EnumType<Capability>>()) 
       .AsBag() 
       .Not.LazyLoad(); 
    } 
} 

這裏是我的過濾器:

public class FilterHasManyConvention : IHasManyConvention 
{ 
    public void Apply(IOneToManyCollectionInstance instance) 
    { 
      instance.ApplyFilter<TenantFilter>("tenantid = :tid"); 
    } 
} 

public class TenantFilter : FilterDefinition 
{ 
    public TenantFilter() 
    { 
     WithName("TenantFilter").AddParameter("tid", NHibernateUtil.String); 
    } 
} 

現在,當我試圖加載我的角色對象,有這樣一個問題:

SELECT capabiliti0_.RoleId as RoleId0_, capabiliti0_.CapabilityId as Capabili2_0_ 
FROM RoleCapability capabiliti0_ WHERE capabiliti0_.tenantid = :TenantFilter.tid and capabiliti0_.RoleId=? 

問題是TenantId不應該應用於RoleCapability關係。有什麼辦法可以阻止它嗎?

感謝

回答

0

這解決了我的問題:

public abstract class TenantEntity 
{ 
public virtual int TenantId {get;set;} 

} 


public class Role : TenantEntity 
{ 
public virtual int TenantId {get;set; 
public virtual IList<Capability> Capabilities { get; set; } 
} 

public class FilterHasManyConvention : IHasManyConvention 
{ 
    public void Apply(IOneToManyCollectionInstance instance) 
    { 
     if (instance.ChildType.IsSubclassOf(typeof(TenantEntity))) 
     { 
       instance.ApplyFilter<TenantFilter>("tenantid = :tid"); 
     } 
    } 
}