插入数据库之前的对象ID(Linq to SQL)

时间:2010-02-18 02:05:12

标签: sql-server linq-to-sql identity

从我收集的内容来看,在调用SubmitChanges()方法之前,Linq到SQL实际上并不执行任何数据库命令(包括打开数据库连接)。如果是这种情况,我想提高几种方法的效率。在插入对象之前,我是否可以检索对象的ID?我不想两次调用SubmitChanges(),如果在实际插入数据库之前我可以知道ID的值。从逻辑的角度来看,只有打开与数据库的连接以找出值才有意义,但是还必须进行插入过程吗?

由于

3 个答案:

答案 0 :(得分:1)

解决此问题的常用技巧是在应用程序层中生成唯一标识符(例如GUID),并将其用作ID。这样,您就不必在后续调用中检索ID。

当然,使用GUID作为主键可能会有它的缺点。如果您决定采用这种方式查找COMB GUID。

答案 1 :(得分:0)

嗯,这就是问题所在:在插入数据库之前,你会以某种方式获得id,并使用它进行一些处理。在同一时间,另一个线程做同样的事情,得到相同的ID,你就会发生冲突。

即。我不认为有这么简单的方法。

答案 2 :(得分:0)

我不一定推荐这个,但已经看过了。您可以使用存储过程和表来计算您自己的ID作为整数来保存下一个ID的值。存储过程从表中选择值以返回它,然后递增该值。该表格类似于以下内容

Create Table Keys(
name varchar(128) not null primary key,
nextID int not null
)

在执行此操作之前需要注意的是,如果您选择并在2个不同批次中进行更新,则可能会发生密钥冲突。这两个步骤都需要被视为原子事务。