[英]Two many-to-one table relationships and insertion with Entity Framework
我有一個與此類似的模型:
上下文:這個想法是它是一個樣本數據庫。 一個樣本具有詳細信息,可以將多個樣本整理到CollatedSample中,也可以在CollatedDetail中將詳細信息整理到一起。 因此,一個CollatedSample具有許多CollatedDetails,並且從許多Samples開始,每個Samples具有許多Details。 一個CollatedDetail也有許多Details。 這是一個“不錯”的廣場。
因此,我添加記錄的方法是:
var sample = new Sample();
var detail = new Detail();
sample.Details.Add(detail);
// suppose I add a bit more meat to these entities...
var collatedSample = new CollatedSample();
var collatedDetail = new CollatedDetail();
collatedSample.Samples.Add(sample);
collatedSample.CollatedDetails.Add(collatedDetail);
collatedDetail.Details.Add(detail);
context.CollatedSamples.AddObject(collatedSample);
context.SaveChanges();
因此,我將所有元素都添加到了彼此,並在Sample和CollatedDetail中都添加了Detail。 在SaveChanges上,我得到了帶有異常消息的Update Exception:
無法確定“ SamplingModel.FK_Detail_CollatedDetailId”關系的主要結尾。 多個添加的實體可能具有相同的主鍵。
我認為可能真正發生的是在記錄CollatedDetail之前嘗試記錄Detail實體。 那個具有兩個關系的詳細信息表是引起麻煩的一個(沒有將它們添加到Sample或CollatedDetail中也無法確認)。 也許有一種方法可以指定插入順序? 我還嘗試了相反的操作,設置了父級,而不是對子級集合使用.Add()
,結果相同。 否則, 我如何一次完成兩叉插入?
編輯:tl;博士:
我找到了一種解決方法:刪除了Detail和CollatedDetail之間的外鍵(如@JaderDiag建議),並從CollatedDetail表中刪除了引用字段。 實體框架創建子類,因此很容易為兩個實體創建其他子類並手動將它們聯接。 我懷疑這會慢得多,但是在以后的開發中,它提供的流動性與實體將提供外鍵的流動性相同。
這是一種解決方法,絕對不是我要找的解決方案。 如果可以的話,我會否決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.