ManyToMany関係のwere句にあるフィールドを永続化する際に問題が発生しましたが、クラスマッピングに明示的に存在していません。説明するのは難しいですが、以下のクラスとマッピングの「is_expred」フィールドです。
次の2つのクラスがあります。
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のいずれかまたは両方に存在できる場合。(いいえ、この特定の役割に対してのみ有効期限が切れているため、パブリケーションに期限切れのフィールドを配置することはできません。別の役割で現在有効になっている可能性があります)
このためのDBは次のとおりです。
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として保存されます。これはデフォルト値の「」です。 DBのis_expired」。
この関係をマッピングし、「is_expired」フィールドに正しく入力する正しい方法について誰かが何か考えを持っていますか?
ご協力いただきありがとうございます
サーン