C#/ Linq-to-sql - 在insertonsubmit上锁定datacontext.Table

时间:2011-10-26 16:58:01

标签: c# linq-to-sql

我正在我的数据访问类上创建一个方法,它将向数据库中插入一个实体对象,之后我希望得到最新的插入ID ...而且我已经完成了但是我已经完成了我想知道如果该方法以某种方式同时被调用两次会发生什么,它会返回错误的ID吗?

因此,我决定在我的datacontext上锁定表格

lock(dataContext.Persons)
{
    InsertOnSubmit(person);
    dataContext.SubmitChanges();
}

但我确实觉得这样不合适......我的意思是,表格不大而且不需要花费很长时间才能提交更改...所以我的问题是,我会遇到什么样的麻烦来锁定那样的吗?

PS:如果我的问题不够清楚,请告诉我,我会编辑它!

2 个答案:

答案 0 :(得分:1)

无需锁定您的桌子。

当您插入ID时,当您致电.SubmitChanges()时,LINQ-to-SQL会自动使用数据库中的标识填充您的person字段。

需要注意的是,您的数据库和L2S实体都必须将您的ID字段定义为标识。在Person实体上,您应该将该字段定义为主键IsDbGenerated=trueUpdateCheck=never,并且具有正确的数据库类型。

提交后,您应该只需从ID实体中检索Person即可:

dataContext.Persons.InsertOnSubmit(person);
dataContext.SubmitChanges();
var id = person.ID; // now has the database generated identity.

答案 1 :(得分:1)

我不确定这是否是您关注的一部分,但如果您使用TransactionScope,则可以传递一个处理多笔交易的TransactionOption。

查看TransactionOption.Isolationlevel