【发布时间】:2013-11-23 22:24:28
【问题描述】:
如果存在则更新行或不存在则添加行的最有效方法是什么?
我正在使用 Linq to SQL,并且已经阅读了 few posts,但没有一个是最新的,或者在没有多个数据库调用或旧框架的情况下解决它。目前我只是插入,如果有重复的语句会给出错误,Violation of PRIMARY KEY constraint。
我需要它快速的原因是它最终会达到数千条记录。
【问题讨论】:
-
我强烈建议使用实体框架而不是 LINQ to SQL。
-
有什么原因吗?设置起来并不难,到目前为止我已经完成了很多工作。
-
如果没有数据库往返,您将无法执行此操作,除非您提前获取所有 PK 值,检查内存并确保在检查之后和提交之前并发用户不会添加重复项.我碰巧给出了类似的答案here。
-
此表仅由单个函数写入,并且仅按计划调用该函数。所以我不必担心比赛条件(对吧?)。
-
另外,如果您担心性能,您可以通过不使用 ORM 而使用纯 SQL 来执行此特定操作,从而将您的速率提高 10 到 20 倍。它在需要的地方产生了真正的影响。