繁体   English   中英

实体框架核心批量扩展:BulkInsertOrUpdate

[英]Entity Framework core bulk Extensions: BulkInsertOrUpdate

我对 entityfremawork 核心批量扩展功能有要求。 当我们使用 _context.BulkInsertOrUpdate(Customers); 我没有在 sql 客户表上创建任何主键。 所以我想像下面这样在外部尝试 map 目标列(插入或更新)

context.BulkInsertOrUpdate()
  .MatchTargetOn(x => x.CustomerId)
  .MatchTargetOn(x => x.CustomerName)
  .Commit(db.Database.Connection);

ef核心批量扩展有什么办法吗

如果库不支持这种匹配,则没有解决方案。 因此考虑将第三方库更改为另一个库或等待功能实现。

顺便说一句,我已经在linq2dbEF Core linq2db.EntityFrameworkCore之间创建了这座桥,所以如果你没有其他选择,这个应该可以工作。

context.Customers
   .ToLinqToDBTable()
   .Merge()
   .Using(entities)
   .On((t, s) => t.CustomerId == s.CustomerId || t.CustomerName == s.CustomerName)
   .InsertWhenNotMatched()
   .UpdateWhenMatched()
   .Merge();

检查InsertWhenNotMatchedUpdateWhenMatched的重载 - 在这里您可以自定义应该插入或更新哪些字段,甚至可以基于目标表中的值。

免责声明:我是实体框架扩展的所有者

该库不是免费的,但可以轻松涵盖自定义键等场景。 InsertOrUpdate相当于BulkMerge

例子:

context.BulkMerge(list,  options => options.ColumnPrimaryKeyExpression = c => 
    new { c.CustomerId, c.CustomerName });

这是一个在线示例: https://dotnetfiddle.net/Lzbh2H

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM