2011-05-24 38 views
1

我有兩個實體:如何實現具有多對多關聯的實體以便能夠使用NHibernate保存根對象?

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 +項目,實體:0條1/1 在NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(字符串的entityName,對象實體,ISessionImplementor會話)

缺少什麼我在這裏?

回答

2

您錯過了級聯設置。

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

全部 - 如果您想保存更新和刪除項目

AllDeleteOrphan - 同所有,但也刪除孤立的項目

SaveUpdate - 在級聯保存或更新

刪除 - 僅級聯刪除的項目

僅供參考,您也可能缺少表規範和父項和子項列。

+0

SaveUpdate完成了這項工作。謝謝 – dimich 2011-05-26 05:00:34