我在保留一个字段时遇到问题,该字段在我的多对多关系的 are 子句中,但在类映射中没有明确存在。很难解释,但它是以下类和映射中的“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;}
}
出版物可以存在于 CurrentPublications 和 ExpiredPublications 中的一个或两个中。(不,我不能将过期字段放在出版物上,因为它仅针对该特定角色过期 - 它可能是当前不同的角色)
用于此的数据库是:
role
{
role_id int (PK)
role_name varchar(50)
}
role_pub
{
role_id int (PK)
pub_id int (PK)
is_expired bit
}
pub
{
pub_id int (PK)
pub_name varchar(50)
}
流畅的映射:
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();
}
}
当我对角色进行选择时,当前和过期的出版物会填充正确的出版物,但是当我将新的出版物添加到当前或过期列表时,它总是将 is_expired 字段保存为 0,这是“ is_expired”在数据库中。
有没有人知道映射这种关系和正确填充“is_expired”字段的正确方法是什么?
谢谢你的帮助
桑