[英]How to add an item to a many-to-many relationship table in Entity Framework Core?
[英]Add item and update relationship in transitional table in many-to-many database Sql Server
-這是錯誤的模型,沒有AB之間的許多關聯。 更正於EDIT2--
數據庫中存在A
,數據庫中存在B
我只需要輸入帶有一些Properties1和Properties2的新C
元素(並更新現有A
和B
元素中C
集合)
我嘗試了很多選項,例如這樣,但是還是有些錯誤(使用ObjectOCntext和存在的Key等)
void SaveNewC(C newC)
{
using (var context = new MyEntities(connectionString))
{
var dbA = context.A.Where(a => a.Id == newC.A.Id).SingleOrDefault();
var dbB = context.B.Where(b => b.Id == newC.B.Id).SingleOrDefault();
newC.A = dbA;
newC.B = dbB;
context.AddObject(newC);
context.SaveChanges();
}
}
編輯
我得到的異常是: "An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key."
EDIT2更新了模型
context.Entry(dbA).State = EntityState.Unchanged;
context.Entry(dbB).State = EntityState.Unchanged;
context.AddObject(newC);
context.SaveChanges();
顯然,您的newC
已經使用正確的Id
填充了導航屬性A
和B
然后,您可以將導航屬性引用的實體附加到上下文:
void SaveNewC(C newC)
{
using (var context = new MyEntities(connectionString))
{
context.A.Attach(newC.A);
context.B.Attach(newC.B);
context.C.AddObject(newC);
context.SaveChanges();
}
}
您是否需要映射聯結表? 如果您想要的只是A-> B中的“多對多”,則可以用一種更簡單的方式來實現。
如果您將C表創建為真正的聯結-並且在SQL中將A和B的FK設置為它的PK,如下所示:
然后,當您從模型創建edmx時,將創建以下內容:
現在,在代碼中,如果您想添加關系,只需將其添加到集合中,EF就會在您的C表中自動為您創建關系:
var A = new A();
var b = new B();
var b2 = new B();
A.B.Add(b);
A.B.Add(b2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.