gpt4 book ai didi

c# - Linq to SQL ForeignKeyReferenceAlreadyHasValueException

转载 作者:行者123 更新时间:2023-11-30 12:33:48 25 4
gpt4 key购买 nike

我查看了几个主题,但没有找到适合我目的的解决方案(至少我不明白我该如何去实现它)

我有一个 WCF 服务,它使用 Linq to SQL 来检索、更新和删除我的 SQL Server 上的对象。

我创建了一个简单的关系数据库,它有一个Customer 和 Order 之间的 1 对多关系,Order和OrderDetails之间的1对多关系,

现在我的订单有一个 CustomerID 的外键,OrderDetails 有一个订单 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 表中,以便“编辑和添加/从现有订单中删除产品”

预先感谢您的帮助

约翰

最佳答案

好的,所以你得到了这个错误,

http://msdn.microsoft.com/en-us/library/system.data.linq.foreignkeyreferencealreadyhasvalueexception.aspx

ForeignKeyReferenceAlreadyHasValueException

链接是这样说的,

表示在实体已加载时尝试更改外键时发生的错误。

我认为您需要做的是加载您正在谈论的订单,它将有一个与之关联的订单详细信息列表。如果您想删除其中一个引用,您需要从 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);

因此您可能不需要再次插入它。

关于c# - Linq to SQL ForeignKeyReferenceAlreadyHasValueException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8440212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com