我有一个主键作为标识列的表。我正在使用linq-to-sql进行插入,我想知道是否有一种方法可以返回插入的行的ID以及我们如何确定插入是否发生。
感谢您的建议。
答案 0 :(得分:2)
在使用数据库中的ID调用SubmitChanges之后,将更新用于插入的实体的主键属性。
例如:
using (var dc = new MyDataContext())
{
MyEntity entity = new MyEntity();
dc.MyEntities.InsertOnSubmit(entity);
dc.SubmitChanges();
int pkValue = entity.PKColumn
}
答案 1 :(得分:1)
使用LINQ-to-SQL,它会在保存期间自动更新任何IDENTITY(etc)属性,所以只需查看.Id
(或其他)。
知道它发生了:更新等发生在交易中;该事务必须已经承诺在没有异常的情况下退出该方法。如果你有一个外部TransactionScope
(或类似的),那么由你来承诺;简而言之 - 直到你确实提交你有一个幻影记录。因此,在您提交所有交易之前,请避免将新ID传递到任何位置。
答案 2 :(得分:1)
插入记录的标识应自动填充添加到插入DataContext
的对象。只需检查该对象的ID即可。
此外,如果您需要有关受影响记录数量的更多手动信息等,您可以查看GetChangeSet()
至see what changes it has tracked上的DataContext
方法。