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。
我有一种情况需要批量更新记录。然而,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。