我们有产品,类别和ProductToCategory类。NHibernate的节约“中间人”与有许多协会
A 产品有很多ProductToCategories,一个类别有很多ProductToCategories。
产品包括该物业
public virtual IList<ProductToCategory> Categories { get; set; }
ProductToCategory
public class ProductToCategory : Entity
{
public virtual Product Product { get; set; }
public virtual Category Category { get; set; }
public virtual bool IsFeatured { get; set; }
}
类别包括这些属性
public virtual Category Parent { get; set; }
public virtual IEnumerable<Category> Children { get; set; }
public virtual IEnumerable<ProductToCategory> Products { get; set; }
我们需要一个显式的ProductToCategory类,因为我们需要关于产品和类别之间关系的布尔属性来确定是否应该在该类别的主页上显示此产品。
映射所有这些都是使用功能NHibernate自动映射一些覆盖
产品映射覆盖
mapping.HasMany(x => x.Categories)
.Cascade.AllDeleteOrphan()
.Inverse();
类别映射覆盖
mapping.HasMany(x => x.Children)
.Cascade.AllDeleteOrphan()
.KeyColumn("ParentId");
mapping.References(x => x.Parent).Column("ParentId");
产品类别映射覆盖
mapping.References(x => x.Category);
当我想保存一个产品,我需要NHibernate的删除链接到该产品的任何现有ProductToCategories,并加入其中已经从UI穿过,同时还更新了其他产品性能如那些名称,零件号等。
什么是最简洁的方式,以确保NHibernate在提供产品类的实例时保存对产品(包括链接的ProductToCategories)的更改。