【问题标题】:EF6 Updating 3 tables in one goEF6 一次更新 3 个表
【发布时间】: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


【解决方案1】:

感谢您抽出宝贵时间。

问题是我只是调用DataContext.SaveChanges() 并将实体添加到正确的模型中。例如:

Customer.Order.Add(customerInfo);

好吧,这是我缺乏理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2018-08-10
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2019-08-21
    相关资源
    最近更新 更多