C# 实体框架中的True merge语句

C# 实体框架中的True merge语句,c#,entity-framework-6,C#,Entity Framework 6,EF中是否存在T-SQLMERGE语句的真正等价物?我知道他们在以前的版本中添加了AddOrUpdate,显然可以处理添加或更新方面的问题。如果源表不匹配,则从目标表中删除,则缺少 这个特定的过程实际上只是同步第三方json结构。我在Entity Framework中的包装添加/更新/删除函数中没有找到任何内容。我想我会在这里问一下,或者有什么创造性的想法来包装它,而不是在实体上枚举,检查是否存在,以及删除数据库中存在但不在源实体中的键 谢谢。不是EF固有的 有一个()用于创建sql合并语句。它

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

这个特定的过程实际上只是同步第三方json结构。我在Entity Framework中的包装添加/更新/删除函数中没有找到任何内容。我想我会在这里问一下,或者有什么创造性的想法来包装它,而不是在实体上枚举,检查是否存在,以及删除数据库中存在但不在源实体中的键

谢谢。

不是EF固有的

有一个()用于创建sql合并语句。它不包括删除,但它是opensoure,当源代码不匹配时,应该很容易添加
,然后删除
或其他内容

免责声明:我与该代码完全没有关联,只是在附近找到了它

或者,您也可以只使用一个存储过程

,而不使用EF本身

有一个()用于创建sql合并语句。它不包括删除,但它是opensoure,当源代码不匹配时,应该很容易添加
,然后删除
或其他内容

免责声明:我与该代码完全没有关联,只是在附近找到了它


或者,您也可以只使用存储过程

这有点奇怪,但是您可以根据“源”实体的集合中不包含的记录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);
}

不幸的是,没有批量删除。

这有点奇怪,但您可以根据记录的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);
}

不幸的是,没有批量删除。

经过一系列的第三方解决方案,我终于找到了一个完美的解决方案

它的速度非常快,需要一个nuget安装、一个using和一行代码

context.BulkMerge(list);
(我还发现批量更新很有用。)

这些函数包含一个实体列表

我的全部内容如下:

public void Merge(MyDataBaseEntity[] array)
{
     using (var ctx = new Entities())
     {
         var list = array.ToList();
         ctx.BulkMerge(list);
     }
}

通过一系列第三方解决方案,我终于找到了一个完美的解决方案

它的速度非常快,需要一个nuget安装、一个using和一行代码

context.BulkMerge(list);
(我还发现批量更新很有用。)

这些函数包含一个实体列表

我的全部内容如下:

public void Merge(MyDataBaseEntity[] array)
{
     using (var ctx = new Entities())
     {
         var list = array.ToList();
         ctx.BulkMerge(list);
     }
}

好的,谢谢你的确认。这将是一个很好的功能添加。好的,谢谢你的确认。这将是MS add的一个不错的功能。在链接中修改此扩展方法可能是一个不错的选择。如果框架本机支持,那就太好了。在链接中修改此扩展方法可能是一个不错的选择。如果框架本机支持,那就太好了。可能重复@Aximum mmmm的可能重复。。。我想三月份是免费的。我绝对没有付钱。在他们的网站上,他们说“专业版本月解锁”。我猜还有一个是他们的开源项目。这是免费的,有很多类似的功能。如果你在他们的网站上查看,没有
BulkMerge
BulkUpdate
。这些仅存在于付费版本中。@mmmm。。。我想三月份是免费的。我绝对没有付钱。在他们的网站上,他们说“专业版本月解锁”。我猜还有一个是他们的开源项目。这是免费的,有很多类似的功能。如果你在他们的网站上查看,没有
BulkMerge
BulkUpdate
。这些仅存在于付费版本中。