[英]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.