如何实现具有多对多关联的实体,以便能够使用NHibernate保存根对象?

时间:2011-05-24 21:18:29

标签: nhibernate nhibernate-mapping many-to-many

我有两个实体:

    public class Group
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }

        private ICollection<Item> _items = new HashSet<Item>();
        public virtual ICollection<Item> Items
        {
            get { return _items; }
            set { _items = value; }
        }
    }

    public class Item
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
    }

我使用以下覆盖的自动化:

automapping.Override<Group>(m => m.HasManyToMany(_ => _.Items).AsSet());

我构造了一个组对象,并将几个项添加到组对象中。当我使用session.Save(group)保存组对象时,会发生异常:

NHibernate.TransientObjectException:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。键入:NhResearch.ManyToManyTests + Item,Entity:0 item1 at NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName,Object entity,ISessionImplementor session)

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

您错过了级联设置。

m => m.HasManyToMany(_ => _.Items).AsSet().Cascade.AllDeleteOrphan()

全部 - 如果您想保存更新和删除项目

AllDeleteOrphan - 与所有相同,但也会删除孤立的项目

SaveUpdate - 保存或更新时级联

删除 - 仅级联已删除的项目

仅供参考,您也可能错过了Table规范以及父键和子键列。