我正在C#项目中使用Entity Framework,以从SQL Server数据库读取数据/向SQL Server数据库写入数据。
直到现在,我仍读取数据并进行了一些计算。现在,我想将结果写入数据库。我本质上是一个[ID, Date, Value]
元组的列表。
如果在INSERT
和ID
组合的目标表中没有行,则更新逻辑应类似于UPSERT,即应发生Date
。如果目标表中已经存在UPDATE
和ID
的组合,则应该执行Date
。
假设我的结果列表中有〜1000条记录。如果我遍历该列表并对列表中的每个项目执行UPSERT逻辑,那将导致〜1000个INSERT
或UPDATE
语句。我认为应该有一种更有效的方法。
因此,我的两个问题是:
如何在不为每个结果项生成单独的SQL语句的情况下实现所描述的UPSERT逻辑?
更笼统:在使用实体框架的C#中,这样的UPSERT逻辑如何?
答案 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