如何使用实体框架扩展库执行批量“INSERT IGNORE”

Rey*_*van 1 .net c# entity-framework insert entity-framework-6

我正在尝试将大量对象插入表中,但我没有任何有效的方法来检查某些记录是否已经存在。每次我用这个:

using Z.EntityFramework.Extensions.Core;
...
await ac.BulkInsertAsync(query, (o) => { o.?? });
Run Code Online (Sandbox Code Playgroud)

它只是在每次找到重复项时停止插入。有没有办法一次运行所有查询而不只是在第一个错误处停止,或者直接应用IGNORE?

Jon*_*nan 5

您应该检查InsertIfNotExists选项。只有不存在的记录才会被插入。

using Z.EntityFramework.Extensions.Core;
...
await ac.BulkInsertAsync(query, (o) => { o.InsertIfNotExists = true });
Run Code Online (Sandbox Code Playgroud)

回答子问题

我的表中有一个字段的唯一键。如何为批量操作设置它?

您可以使用ColumnPrimaryKeyExpression选项自定义密钥。

ctx.BulkInsert(list, options =>
{
    options.ColumnPrimaryKeyExpression = x => new { x.ColumnKey1, x.ColumnKey2 };
    options.InsertIfNotExists = true;
});
Run Code Online (Sandbox Code Playgroud)