簡體   English   中英

實體框架中間表-使用現有的不相關ID插入新記錄嗎?

[英]Entity Framework intermediate table - insert new record using existing unrelated ids?

因此,我有兩個表A和B。每個表的設置如下:

A: ItemAId, ItemAProperty1, ItemAProperty2, etc.
B: ItemBId, ItemBProperty1, ItemBProperty2, etc.

我在表A中有一條記錄,在表B中有一條記錄。這些記錄之間沒有任何關聯。

我有第三個表,C設置如下:

C: ItemAId, ItemBId

我想根據表A和B中的現有記錄在表C中創建新記錄。使用智能感知無法使用C。 我到過的任何地方,建議是從已經存在的A構造一個對象,然后從已經存在的B構造一個對象,將B添加到A(反之亦然),然后執行添加...,因為數據庫中已經存在對象,EF只會進行更新並將對象鏈接到中間表中。 (從插入/更新多實體實體到多實體實體。我該怎么做? )IE:

/**** Rough Psuedocode ****/
 var a = context.First(a => a.Id == passedInAId);
 var b = context.First(b => b.Id == passedInBId);
 a.BProperty.Add(b);
 context.Add(a);
 context.SaveChanges()

但是,在這種情況下,對象沒有與它們相關的屬性,因此無法正常工作。

我知道我可以編寫一個存儲的proc來做到這一點,但是可以使用EF嗎?

因此,正如我從更多挖掘中發現的那樣...

即使ItemA和ItemB之間沒有直接關系,但似乎存在一個包含主ID的鏈接表這一事實,會在ItemB對象內導致ItemA的ICollection,反之亦然。 因此,要使其正常工作,實際上我要做的就是獲取要鏈接的兩個對象,將一個對象添加到另一個所述對象的集合中,然后進行添加。 實際(模仿)代碼的工作方式是:

using ( var ctx = new Model()) 
{
   var item1 = ctx.ItemA.FirstOrDefault(i => i.Id == itemAId);
   var item2 = ctx.ItemB.FirstOrDefault(j => j.Id == itemBId);
   item1.ItemBs.Add(item2);
   ctx.SaveChanges();
}

當然,如果已經驗證了對象的存在,則First()將起作用,並且由於EF煩人的使所有內容都復數化的趨勢,“ item1.ItemBs.Add()”具有“ ItemBs”。

暫無
暫無

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

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