У меня возникла проблема с сохранением поля, которое есть в моем предложении were на выпуске ManyToMany, но не существует в описании классов. Трудно объяснить, но это поле 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;}
}
Где публикация может существовать в одной или обеих текущих публикациях и 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?
Спасибо за вашу помощь
Saan