0

我目前正在使用 aDbsetlist.Count()来获取 Autoincremented 表的主键,其中将在执行任何实际保存之前保存 Row 。但我觉得这种方法不正确,但无法找出纯粹使用 Linq 的任何其他替代方案,有人可以建议如何仅在 Linq 中执行此操作?

db.Invoicesets.Add(invoice); //Invoicesets is Invoice table as list for Linq
order.invno = db.Invoicesets.Count(); // Invno is needed as a foreign for Order table
db.Ordersets.Add(order); //
db.SaveChanges();
4

2 回答 2

1

你要在这里非常小心。如果两个线程同时执行:

order.invno = db.Invoicesets.Count();

您将有两个具有相同 invno 字段的订单,这可能是您不想要的。

我猜这个字段应该有一个唯一的约束,也许是你的主键?我认为没有任何 LINQ 唯一的方法可以做到这一点,我认为您需要将 invno 设为 Identity 列,这样您就可以确保它会增加并保持唯一性。

编辑

顺便说一句,您还可以在应用程序代码中为 invno 生成 GUID,但显然您必须更改数据库中 invno 字段的数据类型。

于 2013-07-18T18:26:27.023 回答
1

你的意思是说,你想先添加实体A,这样你就可以使用身份列A, A.ID作为实体的外键B吗?如果是,您可以使用InsertOnSubmit()

db.Invoicesets.InsertOnSubmit(invoice);
order.invo = invoice;
db.orders.InsertOnSubmit(order);
db.SubmitChanges();
于 2013-07-18T21:18:07.210 回答