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