我正在我的数据访问类上创建一个方法,它将向数据库中插入一个实体对象,之后我希望得到最新的插入ID ...而且我已经完成了但是我已经完成了我想知道如果该方法以某种方式同时被调用两次会发生什么,它会返回错误的ID吗?
因此,我决定在我的datacontext上锁定表格
lock(dataContext.Persons)
{
InsertOnSubmit(person);
dataContext.SubmitChanges();
}
但我确实觉得这样不合适......我的意思是,表格不大而且不需要花费很长时间才能提交更改...所以我的问题是,我会遇到什么样的麻烦来锁定那样的吗?
PS:如果我的问题不够清楚,请告诉我,我会编辑它!
答案 0 :(得分:1)
无需锁定您的桌子。
当您插入ID
时,当您致电.SubmitChanges()
时,LINQ-to-SQL会自动使用数据库中的标识填充您的person
字段。
需要注意的是,您的数据库和L2S实体都必须将您的ID
字段定义为标识。在Person
实体上,您应该将该字段定义为主键IsDbGenerated=true
,UpdateCheck=never
,并且具有正确的数据库类型。
提交后,您应该只需从ID
实体中检索Person
即可:
dataContext.Persons.InsertOnSubmit(person);
dataContext.SubmitChanges();
var id = person.ID; // now has the database generated identity.
答案 1 :(得分:1)
我不确定这是否是您关注的一部分,但如果您使用TransactionScope,则可以传递一个处理多笔交易的TransactionOption。