如果存在,我需要更新,否则使用 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的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL从另一个表更新数据,如果存在,否则插入[重复]

MySQL更新如果存在否则插入

SQL 查询 - 如果存在则更新,否则插入

如果存在则更新行否则使用实体框架插入逻辑[关闭]

如果 id 存在则更新,否则插入 (ODBC)

如果存在如何更新,否则插入新文档?