C# Fluent NHibernate:如何将where子句过滤器映射到多个

C# Fluent NHibernate:如何将where子句过滤器映射到多个,c#,nhibernate,fluent-nhibernate,many-to-many,fluent-nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Many To Many,Fluent Nhibernate Mapping,我在坚持一个字段方面遇到了一个问题,该字段位于我的WARE子句中的多个关系中,但在类映射中并不明确存在。很难解释,但它是下面的类和映射中的“is_expred”字段 我有以下两门课: public class Publication { public virtual int Id {get; set;} public virtual string Name {get; set;} } public class Role { public virtual int Id

我在坚持一个字段方面遇到了一个问题,该字段位于我的WARE子句中的多个关系中,但在类映射中并不明确存在。很难解释,但它是下面的类和映射中的“is_expred”字段

我有以下两门课:

public class Publication
{
    public virtual int Id {get; set;}

    public virtual string Name {get; set;}
}

public class Role
{
    public virtual int Id {get; set;}
    public virtual string Name {get; set;}

    public virtual IEnumerable<Publication> CurrentPublications {get; set;}

    public virtual IEnumerable<Publication> ExpiredPublications {get; set;}
}
以及fluent映射:

public class RoleMapping : ClassMap<Role>
{
    public RoleMapping()
    {
        Table("role");
        Id(x => x.Id, "role_id").GeneratedBy.Identity();
        Map(x => x.Name, "role_name").Not.Nullable();

        HasManyToMany<Publication>(x => x.CurrentPublications)
            .Table("role_pub")
            .ParentKeyColumn("role_id")
            .ChildKeyColumn("pub_id")
            .Where("is_expired = 0")
            .LazyLoad();

        HasManyToMany<Publication>(x => x.ExpiredPublications)
            .Table("role_pub")
            .ParentKeyColumn("role_id")
            .ChildKeyColumn("pub_id")
            .Where("is_expired = 1")
            .LazyLoad();
    }
}


public class PublicationMapping : ClassMap<Publication>
{
    public PublicationMapping()
    {
        Table("pub");
        Id(x => x.Id, "pub_id").GeneratedBy.Identity();
        Map(x => x.Name, "pub_name").Not.Nullable();
    }
}
公共类角色映射:类映射
{
公共角色映射()
{
表(“角色”);
Id(x=>x.Id,“role_Id”).GeneratedBy.Identity();
Map(x=>x.Name,“role_Name”).Not.Nullable();
HasManyToMany(x=>x.CurrentPublications)
.Table(“角色发布”)
.ParentKeyColumn(“角色id”)
.ChildKeyColumn(“发布id”)
。其中(“是否过期=0”)
.LazyLoad();
HasManyToMany(x=>x.ExpiredPublications)
.Table(“角色发布”)
.ParentKeyColumn(“角色id”)
.ChildKeyColumn(“发布id”)
。其中(“是否过期=1”)
.LazyLoad();
}
}
公共类PublicationMapping:ClassMap
{
公共出版物映射()
{
表(“pub”);
Id(x=>x.Id,“pub_Id”).GeneratedBy.Identity();
Map(x=>x.Name,“pub_Name”).Not.Nullable();
}
}
当我在角色上执行选择时,当前和过期的发布将填充正确的发布,但是当我将新发布添加到当前或过期列表时,它总是将is_Expired字段保存为0,这是数据库中“is_Expired”的默认值

有人知道映射这种关系和正确填充“是否过期”字段的正确方法吗

谢谢你的帮助


Saan

其中的仅在选择中过滤,但从不填充插入中的列。您可以引入一个类
角色发布
,该类映射了
已过期

public class RolePublication
{
    public virtual Role Role {get; set;}
    public virtual Publication Publication {get; set;}
    public virtual bool IsExpired {get; set;}
}

public class Role
{
    ...
    internal protected virtual ICollection<RolePublication> Publications {get; set;}

    public virtual IEnumerable<Publication> CurrentPublications
    { get { return Publications.Where(rp => rp.IsExpired == false).Select(rp => rp.Publication); ) } }

    public virtual IEnumerable<Publication> ExpiredPublications
    { get { return Publications.Where(rp => rp.IsExpired == true).Select(rp => rp.Publication); ) } }
}
公共类角色发布
{
公共虚拟角色{get;set;}
公共虚拟发布{get;set;}
公共虚拟bool IsExpired{get;set;}
}
公共阶级角色
{
...
内部保护的虚拟ICollection发布{get;set;}
公共虚拟IEnumerable出版物
{get{返回发布。其中(rp=>rp.IsExpired==false)。选择(rp=>rp.Publication);)}
公共虚拟IEnumerable过期发布
{get{返回发布。其中(rp=>rp.IsExpired==true)。选择(rp=>rp.Publication);)}
}
public class RolePublication
{
    public virtual Role Role {get; set;}
    public virtual Publication Publication {get; set;}
    public virtual bool IsExpired {get; set;}
}

public class Role
{
    ...
    internal protected virtual ICollection<RolePublication> Publications {get; set;}

    public virtual IEnumerable<Publication> CurrentPublications
    { get { return Publications.Where(rp => rp.IsExpired == false).Select(rp => rp.Publication); ) } }

    public virtual IEnumerable<Publication> ExpiredPublications
    { get { return Publications.Where(rp => rp.IsExpired == true).Select(rp => rp.Publication); ) } }
}