NHibernate saving“;“中间人”;和他有很多联系

NHibernate saving“;“中间人”;和他有很多联系,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我们有产品、类别和产品分类类 产品有许多ProductToCategories,类别有许多ProductToCategories 产品包括此属性 public virtual IList<ProductToCategory> Categories { get; set; } 类别包括这些属性 public virtual Category Parent { get; set; } public virtual IEnumerable<Category>

我们有产品类别产品分类

产品有许多ProductToCategories类别有许多ProductToCategories

产品包括此属性

public virtual IList<ProductToCategory> Categories { get; set; }
类别包括这些属性

    public virtual Category Parent { get; set; }
    public virtual IEnumerable<Category> Children { get; set; }
    public virtual IEnumerable<ProductToCategory> Products { get; set; }
类别映射覆盖

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);
产品到类别映射覆盖

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传递的ProductToCategories,同时更新其他产品属性,如名称、零件号等


当提供my Product类的实例时,确保NHibernate保存对产品(包括链接的ProductToCategories)的更改的最简洁的方法是什么。

如果来自UI的产品实例与NHibernate会话没有关联,而是一个持久实体(具有有效标识)然后
session.Merge(instance)
session.SaveOrUpdateCopy(instance)
就可以了。他们将从数据库中获取该实体的副本,并保存实例与数据库实例之间的更改