LINQ to sql -error在插入2时引发父子关系
问题描述:
我有订单&订单详细信息实体的OrderID作为外键在订单明细表中。 OrderID是Order的标识列,并设置为自动生成。LINQ to sql -error在插入2时引发父子关系
当我做一个插入如下(为简单起见硬编码值):
LINQ1DataContext db = new LINQ1DataContext();
Order order = new Order();
order.OrdersCustomerID = 1;
order.OrdersDate = time;
db.Orders.InsertOnSubmit(order);
OrdersDetail oDetail = new OrdersDetail();
oDetail.OrdersDetailID = order.OrdersID;
oDetail.OrdersDetailProdID = 1;
oDetail.OrdersDetailQty = 6;
oDetail.OrdersDetailUnitPrice = 2.58m;
db.OrdersDetail.InsertOnSubmit(oDetail);
db.SubmitChanges();
这将导致一个错误“与外键约束冲突”。 我发现这是因为在InsertOnSubmit(order)时没有生成orderID。当SubmitChanges()然后运行时,OrdersDetailID不匹配OrdersID并获取错误。 OrderID只会在'submitchanges()'后生成。
如果放在一个额外的db.SubmitChanges();在db.Orders.InsertOnSubmit(order)之后,orderid按照我期望的和orderDetails的方式自动生成,然后插入正确。
我的问题是,当插入到像这样的2个表(父 - 子)时,必须在每个insertOnSubmit之后放入submitChanges是否正常?
我认为insertOnSubmit的想法是我可以在不同的表上执行一些插入操作,LINQ to SQL将会处理SubmitChanges之后的所有细节。
感谢,
答
LINQ1DataContext db = new LINQ1DataContext();
Order order = new Order();
order.OrdersCustomerID = 1;
order.OrdersDate = time;
db.Orders.InsertOnSubmit(order);
> db.SubmitChanges();
OrdersDetail oDetail = new OrdersDetail();
oDetail.OrdersDetailID = order.OrdersID;
oDetail.OrdersDetailProdID = 1;
oDetail.OrdersDetailQty = 6;
oDetail.OrdersDetailUnitPrice = 2.58m;
db.OrdersDetail.InsertOnSubmit(oDetail);
db.SubmitChanges();
答
前
db.OrdersDetail.InsertOnSubmit(oDetail);
添加
order.OrdersDetail.Add(oDetail);
似乎工作,只需要一个db.SubmitChanges()。也许这就是做这种事情的方式..
做一个提交中间变化是错误的信息。相反,他自己找到了正确的解决方案,即让框架自己连接外键。如果您只是通过连接属性将详细记录添加到父记录中,如order.OrdersDetails.Add(oDetail)(而不是InsertOnSubmit(oDetail)),并且不要在子项中设置外键,那么它将更新自动只有一个提交。 – 2014-06-25 21:57:47