Z.EntityFramework.Extensions.EFCore BulkMerge - 非键索引以批量更新记录

Z.EntityFramework.Extensions.EFCore BulkMerge - Non Key Indexing to Update Records on Mass

我有一种情况需要批量更新记录。然而,mytable 构建得非常动态,它的主键是 DBGenerated。我想知道是否有人使用 EF Extensions 完成基于其他字段的更新。我已经从他们的文档中尝试了以下内容,但它没有映射并且只是重新插入了很多。我曾多次尝试修改选项,但收效甚微。 我需要将 'update-keys' 映射为其他三个列,同时保留原始 PK。有人能在保持速度的同时建议更好的路线吗? ..我真的不想循环并一次手动更新每个

https://bulk-operations.net/bulk-merge

await _db.Enotes.BulkMergeAsync(orderEnotes, operation =>
{
    operation.AutoMapKeyExpression = prop => new { prop.Entity, prop.EnoteType, prop.KeyValue1 };
    operation.InsertIfNotExists = true;
    operation.InsertKeepIdentity = false;
});

Class

public class EnoteEntity
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Int64 EnoteID { get; set; }

        public string Entity { get; set; }

        public string EnoteType { get; set; }

        public string KeyValue1 { get; set; }

        public string KeyValue2 { get; set; }

Code removed for brevity... 

您目前使用库 Entity Framework Extensions,但您正在查看 Bulk Operations 文档,因此存在一些差异。

这里是关于批量合并的正确文档:https://entityframework-extensions.net/bulk-merge

您会发现,您不应该使用 AutoMapKeyExpression 而是 ColumnPrimaryKeyExpression 来指定自定义密钥 (Online Example):

await _db.Enotes.BulkMergeAsync(orderEnotes, operation =>
{
    operation.ColumnPrimaryKeyExpression = prop => new { prop.Entity, prop.EnoteType, prop.KeyValue1 };
});

此外,

选项 InsertIfNotExists 仅适用于 BulkInsert,默认情况下 InsertKeepIdentity 已为 false。