如果存在,我需要更新,否则使用 Linq 插入 SQL
Posted
技术标签:
【中文标题】如果存在,我需要更新,否则使用 Linq 插入 SQL【英文标题】:I need to Update if exist else Insert with Linq to SQL 【发布时间】: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 倍。它在需要的地方产生了真正的影响。 【参考方案1】:知道为此需要往返调用,我加载了表的主键值。然后在调用db.SaveChanges
之前添加了以下代码:
if (checklist.Contains(tempstats))
db.Stats.Add(tempstats);
【讨论】:
以上是关于如果存在,我需要更新,否则使用 Linq 插入 SQL的主要内容,如果未能解决你的问题,请参考以下文章