如何在Linq-to-Sql中提交之前获取下一个身份ID?

时间:2010-09-21 12:04:03

标签: linq-to-sql

我想获取下一个身份ID,然后将其记录到某处。只有之后我才能调用SubmitChanges()。

3 个答案:

答案 0 :(得分:4)

DataContext换行到数据库事务中,并调用SubmitChanges将更改写入该事务中的数据库。这样,您可以获得自动生成的ID,同时保持操作事务性:

using (var con = new SqlConnection(conStr))
{
    con.Open();
    using (var tran = con.BeginTransaction())
    {
        using (var db = new YourDataContext(con))
        {
            // Setting the transaction is needed in .NET 3.5. 
            // It's a bug in L2S and was fixed in .NET 4.0.
            db.Transaction = tran;

            var entity = new MyEntity();

            db.MyEntities.InsertOnSubmit(entity);

            db.SubmitChanges();

            var id = entity.Id;

            // Do something useful with this id
        }

        tran.Commit();
    }
}

答案 1 :(得分:1)

将整个事物包裹在事务中,执行SELECT IDENT_CURRENT('table_name')然后提交更改,提交事务。如果您锁定了表格,该表格会阻止其他人在您的SELECT IDENT_CURRENT之后插入记录,并且在插入之前应该为您提供正确的标识值。

答案 2 :(得分:0)

您需要在数据库中添加lastModified日期列并获取它,如果没有,则增加标识列

其他明智的做法是SubmitChanges()并获得nextID