通过实体框架更新SQL Server数据库

时间:2019-08-09 12:00:41

标签: c# entity-framework upsert

我正在C#项目中使用Entity Framework,以从SQL Server数据库读取数据/向SQL Server数据库写入数据。

直到现在,我仍读取数据并进行了一些计算。现在,我想将结果写入数据库。我本质上是一个[ID, Date, Value]元组的列表。

如果在INSERTID组合的目标表中没有行,则更新逻辑应类似于UPSERT,即应发生Date。如果目标表中已经存在UPDATEID的组合,则应该执行Date

假设我的结果列表中有〜1000条记录。如果我遍历该列表并对列表中的每个项目执行UPSERT逻辑,那将导致〜1000个INSERTUPDATE语句。我认为应该有一种更有效的方法。

因此,我的两个问题是:

  1. 如何在不为每个结果项生成单独的SQL语句的情况下实现所描述的UPSERT逻辑?

  2. 更笼统:在使用实体框架的C#中,这样的UPSERT逻辑如何?

2 个答案:

答案 0 :(得分:0)

我无法评论询问您是否有权访问存储过程,或者是否有其他考虑,因此在此先致歉。

尝试删除您要“插入”的所有记录的[ID, Date],然后进行大容量插入。您虽然不需要Entity Framework poco操作,但可以解决您的问题。

答案 1 :(得分:0)

理想地,为了提高性能,您想要生成一个SQL Server MERGE语句,该语句将INSERT和/或UPDATE作为一个单独的动作执行。不幸的是,我不认为这是内置于实体框架中的,但是有相当简单的解决方法。一个,请看这里:

https://www.flexlabs.org/2018/02/adding-upsert-support-for-entity-framework-core

相关问题