从我收集的内容来看,在调用SubmitChanges()
方法之前,Linq到SQL实际上并不执行任何数据库命令(包括打开数据库连接)。如果是这种情况,我想提高几种方法的效率。在插入对象之前,我是否可以检索对象的ID
?我不想两次调用SubmitChanges()
,如果在实际插入数据库之前我可以知道ID的值。从逻辑的角度来看,只有打开与数据库的连接以找出值才有意义,但是还必须进行插入过程吗?
由于
答案 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个不同批次中进行更新,则可能会发生密钥冲突。这两个步骤都需要被视为原子事务。