c# - Entity Framework 中的真正合并语句

标签 c# entity-framework-6

EF 中是否存在与 T-SQL MERGE 语句真正等效的语句?我知道他们在以前的版本中添加了 AddOrUpdate,这显然可以处理添加或更新方面的问题。它缺少当与源不匹配时然后从目标表中删除的信息。

这个特定的过程实际上只是批发同步第三方 json 结构。我没有在 Entity Framework 中的包装添加/更新/删除函数中找到任何内容。我想我会在这里询问或提出任何关于包装这个与枚举实体、检查是否存在以及删除数据库中但不在源实体中的 key 的创造性想法。

谢谢。

最佳答案

这有点奇怪,但您可以根据记录的 ID 选择记录,这些记录不包含在您从“源”实体中获得的集合中,然后从 DbContext 中删除这些记录。

var sourceIds = source.Select(s=>s.Id);
var notFounds = context.Target.Select(s=>!sourceIds.Contains(s.Id));
foreach (var notFound in notFounds) {
  context.Target.DeleteObject(notFound);
}

遗憾的是没有批量删除。

关于c# - Entity Framework 中的真正合并语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32277738/

相关文章:

c# - 将时间戳附加到文件名

c# - 将 pdf 文件添加到 Visual Studio 中

c# - 无法使用 Firebase 插入数据

c# - 使用 Entity Framework Code First 在数据库中存储 System.Version

c# - 如何在 EF6 中手动构造表达式以匹配相同的输出?

c# - 反序列化时跳过无效值

c# - asp.net ListView : hide a div inside itemtemplate for every 3'rd item

c# - 无需 PredicateBuilder 将动态谓词添加到表达式

c# - 在 ASP.NET MVC 中连接两个表的正确方法是什么?

c# - EF 中 IDatabaseInitializer 的正确用法是什么?