【发布时间】:2015-05-15 14:38:09
【问题描述】:
我有一个包含 3 个表的数据库
表 客户
CustomerID (PK)
Name
表 订购
OrderID (PK)
CustomerID (FK)
OrderDate
表 OrderDetailLine
OrderDetailLineID
OrderID (FK)
Price
ProductCode
我想在实体框架中做的是添加 1 个客户,然后添加几个不同的订单,每个订单都有许多 OrderDetailLine,所有这些都与插入的第一个客户有关。我已经连接了 SQL Server 中的所有关系并将它们导入到 EF 模型中。都没有问题。我可以插入 1 个客户和许多订单,并且 OrderDetailLine 第一次所有记录都可以正确插入到正确的数据库表中
我在文件中循环添加客户和订单,然后将客户和订单添加到数据库中
但是当我想为同一个客户添加另一个订单时(我在 CustomerID 上遇到主键违规)。 EF 正在尝试在我的初始上下文之后重新插入同一个客户。SaveChanges();
那么,如何阻止 EF 在使用相同的数据上下文时尝试添加相同的客户?
我已经转了几个小时,得到了同样的错误
{"INSERT 语句与 FOREIGN KEY 约束 \"FK_Order_Customer\" 冲突。冲突发生在数据库 \"xxxxx\",表 \"dbo.Customer\",列 'CustomerID'
客户是与订单和订单行一起新建的。但它第一次工作,我从 EF 取回 CustomerID。但是当我在初始 context.savechanges(); 之后添加新订单和订单线时我收到 FK 错误
【问题讨论】:
-
您是尝试创建新客户,还是通过EF获取客户,然后添加订单?
-
向我们展示一些代码,如果您正在使用
var customer = new Customer();,请立即停止并使用var customer = context.Set<Customer>().Add(context.Set<Customer>().Create());- 否则,即使您设置了@,您也不会获得代理对象并且您的CutomerId保持为0 987654327@参考。 -
您好,客户是与订单和订单行一起新建的。但它第一次工作,我从 EF 取回 CustomerID。但是当我在初始 context.savechanges(); 之后添加新订单和订单线时我收到 FK 错误。
-
@user142617 你能发布模型的代码吗?
标签: c# sql-server entity-framework