2010-12-05 68 views
3

我有订单&订单详细信息实体的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之后的所有细节。

感谢,

回答

0
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(); 
+0

做一个提交中间变化是错误的信息。相反,他自己找到了正确的解决方案,即让框架自己连接外键。如果您只是通过连接属性将详细记录添加到父记录中,如order.OrdersDetails.Add(oDetail)(而不是InsertOnSubmit(oDetail)),并且不要在子项中设置外键,那么它将更新自动只有一个提交。 – 2014-06-25 21:57:47

3

db.OrdersDetail.InsertOnSubmit(oDetail); 

添加

order.OrdersDetail.Add(oDetail); 

似乎工作,只需要一个db.SubmitChanges()。也许这就是做这种事情的方式..