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);
    }
}

Role オブジェクトを読み込もうとすると、次のような問題が発生します。

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

問題は、TenantId を RoleCapability 関係に適用してはならないことです。これを止める方法はありますか?

ありがとう

4

1 に答える 1

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");  
        }
    }
}
于 2013-07-01T19:04:49.823 に答える