我使用EFCore.BulkExtensions来插入和更新表中的记录。但我对更新记录有问题。
例如,我有15条记录(10条要插入,5条要更新)。我需要插入10,但只更新2,因为3条记录在UpdatedAt属性中有旧值(数据库包含更多最新数据)。
如果我像这样使用EFCore.BulkExtensions:
_dbContext.BulkInsertOrUpdateAsync(entitiesList, _bulkConfig);将插入10项记录,并更新5项记录。因此,数据库中的数据将由旧的数据更新。
为了解决我的问题,我想要这样的东西:
_dbContext.BulkInsertOrUpdateAsync(entitiesList, _bulkConfig,
(oldRecord, newRecord) => newRecord.UpdatedAt > oldRecord.UpdatedAt);你能提出一些用EFCore.BulkExtensions解决这个问题的有效方法吗?
发布于 2022-05-30 10:38:30
这不是对EFCore.BulkExtensions的直接回答,而是使用linq2db.EntityFrameworkCore的替代方法。请注意,我是其中一个创造者。
await context.SomeTable
.ToLinqToDBTable()
.Merge()
.Using(entitiesList)
.On((t, s) => t.Id == s.Id)
.InsertWhenNotMatched()
.UpdateWhenMatchedAnd((t, s) => s.UpdatedAt > t.UpdatedAt)
.MergeAsync();为EF Core 2.x选择适当的软件包2.x,为EF Core 3.1.x选择3.x包,等等。
https://stackoverflow.com/questions/72424044
复制相似问题