我可能在這裏做一個新手的錯誤,但我無法弄清楚如何使這項工作。我有兩個實體 - Parent
和Child
,其中一個Parent
可以有許多Child
ren。問題似乎是,當我向父項添加新子項時,父項不能級聯保存子項,因爲子項實例尚未具有ID。在另一方面,孩子不能在自己的堅持,所以它沒有獲得一個ID的方式...NHibernate的堅持爲了增加對象集合
我的映射:
public ParentMap()
{
// ID and other properties
HasMany(p => p.Children).Cascade.AllDeleteOrphan().Not.LazyLoad();
}
public ChildMap()
{
// ID and other properties
References(c => c.Parent);
}
現在,我可能已經有一個父記錄在我的數據庫中,並且我想將一個孩子添加到其子集合中。爲此,我創建了一個Child
類的新實例,將該子項添加到父項的Children
屬性(類型爲IList<Child>
)。我還獲取父記錄並將子女Parent
屬性設置爲父實體。
當我試圖挽救這個,我得到的錯誤,無論我嘗試做順序。
隨着Save(p)
,節約父記錄,希望孩子將被保存在級聯,我得到以下錯誤:
Cannot insert the value NULL into column 'ChildID', table 'dbo.Children'; column does not allow null values. INSERT fails. The statement has been terminated.
如果我試着在其他的方式,即先救孩子,然後加入它的母公司和保存的父母,我得到以下錯誤:
null id in Application.Domain.Entities.Child entry (don't flush the Session after an exception occurs)
按照什麼順序我應該叫parent.Children.Add(child)
,child.Parent = parent
,session.Save(parent)
和session.Save(child)
,使這個工作?我的映射配置中是否缺少某些東西?
更新:我添加.Inverse()
,並嘗試沒有成功如下:
// First of the above errors
session.Save(child);
child.Parent = parent;
parent.Children.Add(child);
session.Save(parent);
// Second of the above errors
child.Parent = parent;
parent.Children.Add(child);
session.Save(child);
session.Save(parent);
// Second of the above errors
child.Parent = parent;
parent.Children.Add(child);
session.Save(parent);
// Second of the above errors
child.Parent = parent;
parent.Children.Add(child);
session.Save(child);
隨着'.Inverse()'如你所說,我仍然得到完全相同的錯誤。 –