Linq to SQL ForeignKeyReferenceAlreadyHasValueException
我看了几个线程,但我没有看到符合我目的的解决方案(至少我不明白我如何实现它)
我有一个使用Linq to SQL的WCF服务,以便检索,更新和删除SQL Server上的对象。
我创建了一个简单的Relational数据库,它在Customer和Order之间有1对多的关系,Order和OrderDetails之间有1对多的关系,
现在我的订单有一个CustomerID的外键,OrderDetails有一个外国的KW订单ID。
但是OrderDetails还在Products表中包含ProductID的FK。
基本上我现在要做的是使用OrderID修改OrderDetails并使用ProductID添加另一个产品。
虽然我一直收到ForeignKeyReferenceAlreadyHasValueException,但我遇到了问题
我写过这个,我知道这是完全错误的,但当时我并不知道(我完全不熟悉SQL,Linq to SQL等)我无法做到这一点。
OrderDetail item = new OrderDetail(); item.OrderID = orderItem.OrderID; item.ProductID = orderItem.ProductID; item.ProductQuantity = orderItem.ProductQuantity; jacksDB.OrderDetails.InsertOnSubmit(item); jacksDB.SubmitChanges();
我读到我必须使用像这样的公共代码行来映射实体或类似的东西
var order = jacksDB.Orders.Single(o => o.OrderID == orderItem.OrderID); var orderDetail = order.OrderDetails.Single(o => o.OrderID == orderItem.OrderID); orderDetail.ProductID = orderItem.ProductID; orderDetail.ProductQuantity = orderItem.ProductQuantity; orderDetail.Discount = orderItem.Discount; jacksDB.OrderDetails.InsertOnSubmit(orderDetail); jacksDB.SubmitChanges();
可能有人可能会显示,如果不是太多要求解释一下我如何正确地使用现有的OrderID(FK)将新的OrderDetail记录插入我的OrderDetails表以便“编辑和添加/删除产品现有订单“
在此先感谢您的帮助
约翰
好的,所以你收到这个错误,
ForeignKeyReferenceAlreadyHasValueException
链接说明了这一点,
表示在已加载实体时尝试更改外键时发生的错误。
我认为您需要做的是加载您正在谈论的订单,它将有一个与之关联的OrderDetails列表。 如果要删除其中一个引用,则需要从OrderDetails列表中删除OrderDetail。
我想你需要做这样的事情,
using (DataClasses1DataContext context = new DataClasses1DataContext()) { Customer customer = context.Customers.Where(x => x.CustomerID == 1).Single(); Order order = new Order(); // set some order fields here customer.Orders.Add(order); OrderDetail orderDetail = new OrderDetail(); order.OrderDetails.Add(orderDetail); orderDetail.Product = context.Products.Where(x => x.ProductID == 2).Single(); orderDetail.ProductID = orderDetail.Product.ProductID; context.SubmitChanges(); }
尝试不使用InsertOnSubmit,但仍保留SubmitChanges。 我建议,因为你已经通过设置这个来添加记录,
order.OrderDetails.Add(orderDetail);
所以你可能不需要再次插入它。
- 名称ChromiumWebBrowser在名称空间“clr-namespace:CefSharp.Wpf; assembly = CefSharp.Wpf”中不存在
- 如何在ac#winforms程序中添加类似控制台的控制台
- 从代码而不是从配置启用log4net的文件日志记录
- 身份2的种子数据库
- c#和newtonsoft中的JSON Date和DateTime序列化
- C#Owin登录在生产系统上生成identity = null
- OpenQA.Selenium.WebDriverException:未知错误:Chrome无法启动:在Linux上通过Selenium执行测试时exception退出
- 使具有特定颜色的图像的每个像素透明
- .net应用程序是否有通配符扩展选项?