【发布时间】:2017-05-05 16:38:15
【问题描述】:
抱歉,如果之前有人问过这个问题。没找到。
我有一张这样的Orders表:
`id | orderId | productId`
订单可能有多个产品,但它们都应具有相同的订单 ID。
在我做的代码中:
int nextOrder=db.Orders.Max(m=>m.orderId)+1;//???!!!!
foreach(var p in productList)
{
var o=new Order();
o.orderId=nextOrder;//???????????????????
o.productId=p.productId;
db.Orders.Add(o);
}
db.SaveChanges();
但是,这不是线程安全的——当我处理一个订单时,另一个线程可能会获得相同的订单 ID。如何解决此问题以插入多个具有相同订单 ID 的记录,该订单 ID 从上一个 MAX 值递增?
谢谢!
【问题讨论】:
-
您应该将产品添加到集合
order.Products,然后 EF 将完成剩下的工作。 (因为 Order 有一个自动增量列,如下所述)。 -
@Gert Arnold 我希望避免创建另一个表 order,因为我没有与整个订单相关的属性。
-
那么它有什么用呢?它只不过是一个与任何无关的递增的 Id 值。通常,此模型由三个表组成,
Order、Product和一个以多对多关系连接两者的联结表(您的表)。 -
@Gert Arnold 我的例子只是一个例子。我拥有的是一组项目,我想将其保留为 'row_id |收藏ID | item_data' 在一个表中。
-
你和 Mad Myche 似乎在说我需要两张表 Collections 和 CollectionItems
标签: c# .net entity-framework linq