簡體   English   中英

兩個多對一的表關系以及使用Entity Framework的插入

[英]Two many-to-one table relationships and insertion with Entity Framework

我有一個與此類似的模型:

在此處輸入圖片說明

上下文:這個想法是它是一個樣本數據庫。 一個樣本具有詳細信息,可以將多個樣本整理到Collat​​edSample中,也可以在Collat​​edDetail中將詳細信息整理到一起。 因此,一個Collat​​edSample具有許多Collat​​edDetails,並且從許多Samples開始,每個Samples具有許多Details。 一個Collat​​edDetail也有許多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和Collat​​edDetail中都添加了Detail。 在SaveChanges上,我得到了帶有異常消息的Update Exception:

無法確定“ SamplingModel.FK_Detail_Collat​​edDetailId”關系的主要結尾。 多個添加的實體可能具有相同的主鍵。

我認為可能真正發生的是在記錄Collat​​edDetail之前嘗試記錄Detail實體。 那個具有兩個關系的詳細信息表是引起麻煩的一個(沒有將它們添加到Sample或Collat​​edDetail中也無法確認)。 也許有一種方法可以指定插入順序? 我還嘗試了相反的操作,設置了父級,而不是對子級集合使用.Add() ,結果相同。 否則, 我如何一次完成兩叉插入?

編輯:tl;博士:

在此處輸入圖片說明

我找到了一種解決方法:刪除了Detail和Collat​​edDetail之間的外鍵(如@JaderDiag建議),並從Collat​​edDetail表中刪除了引用字段。 實體框架創建子類,因此很容易為兩個實體創建其他子類並手動將它們聯接。 我懷疑這會慢得多,但是在以后的開發中,它提供的流動性與實體將提供外鍵的流動性相同。

這是一種解決方法,絕對不是我要找的解決方案。 如果可以的話,我會否決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM