【问题标题】:How do I execute a bulk `INSERT IGNORE` with Entity Framework Extensions library如何使用实体框架扩展库执行批量“插入忽略”
【发布时间】:2017-06-12 01:01:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net entity-framework insert entity-framework-6


    【解决方案1】:

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

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

    回答子问题

    我的表中有一个 UNIQUE 键,位于其中一个字段上。如何为批量操作设置它?

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

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

    【讨论】:

    • 对,我以前不知何故错过了这个选项。谢谢!
    • 还是应该抛出Duplicate entry [...]异常吗?
    • 不应该,除非数据库中的键与您用于 BulkMerge 的键不同。你仍然得到异常吗?
    • 是的,我愿意。我的表中有一个UNIQUE 键,位于其中一个字段上。如何为批量操作设置它?
    • 它似乎仍然无法正常工作。我仍然在这条线上收到Duplicate entry 'R1550672' for key 'IX_UniversalId'await ac.BulkInsertAsync<UnifiedPost>(query, (o) => { o.ColumnPrimaryKeyExpression = p => new { p.Id, p.UniversalId }; o.InsertIfNotExists = true; });
    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多