LINQ获取下一行ID?

3
假设我有一个带有RowId和Value的表格:
1 valueA
2 valueB
3 valueC
4 valueD

那么假设我删除了第4行:

1 valueA
2 valueB
3 valueC

下一个行ID将是5。因为第4行被删除了,所以我不能简单地找到表中的最后一行并加1来获得下一个行ID。那我该如何获取下一个行ID呢?
谢谢!

3
为什么需要知道下一个自动生成的ID是什么? - Jimmy
这是在向表中插入新行时创建表关系的操作。 - sooprise
2
这应该通过 SQL 自动处理。请考虑设置自动递增的主键。否则,只需获取最后一条记录并执行 +1 操作即可,尽管这不是理想的解决方案。 - Jimmy
http://www.sitepoint.com/forums/showthread.php?t=41676 - Jimmy
2
这是错误的。假设您可以猜测下一个行 ID 是什么,如果您先插入子记录,则可能会发生冲突。此外,如果在父记录之前插入它们,则无法强制执行子记录上的外键关系。 - NotMe
2个回答

3
在LinqToSQL中,如果两个类都有一个PRIMARY KEY IDENTITY列并且具有连接关系(由数据库中的FKey创建或手动在设计器中创建),您可以像这样插入两个相关项:
Customer c = new Customer() {Name = "Bob"};
Order o = new Order() {Customer = c, Quantity = 5};

myDataContext.InsertOnSubmit(c);
  //submit changes will insert c and o
  //  in the right order and with all id's populated.
myDataContext.SubmitChanges();
  //the id's are populated 
int customerID = c.CustomerID;
int orderID = o.OrderID;
customerID = o.CustomerID;

+1 确切地说 - 让 Linq-to-SQL 处理所有这些混乱的细节,不必担心提前猜测 ID! - marc_s
如果您想要插入两个对象,我认为您必须使用InsertOnSubmit(o)。c没有引用o,对吗? - Jason Kleban
c 通过关联创建的 Orders 属性引用 o。这个同样的关联也创建了 Order.Customer 属性。 - Amy B

2

在插入新行之后,您将获得行ID。在插入之前我不明白为什么您需要它!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接