使用 EFCore.BulkExtensions 库方法 BulkInertOrUpdate 时区分插入和更新的记录

问题描述 投票:0回答:1

我必须填写 SQL Server 数据库表中的

CreationTime
LatestUpdate
列。插入时
CreationTime
必须为
DateTime.Now
,而每次更新记录时
LatestUpdate
必须更新为
DateTime.Now
。我必须批量更新很多记录,所以我想使用
EFCore.BulkExtensions
库方法BulkInsertOrUpdate
我设法将
CreationTime
永远填写一次,将其默认设置为值
DateTime.Now
并使用批量配置
PropertiesToExcludeOnUpdate

但是,我无法以正确的方式填写
LatestUpdate

我在填写

PropertiesToExcludeOnCompare
后尝试使用批量配置
DateTime.Now
。但此选项始终将我的
LatestUpdate
字段更新为“现在”,无论其他列是否已更新。我无法理解这个选项的用途。它似乎总是以同样的方式工作。
在文档中:

通过向

PropertiesToExcludeOnCompare
添加列名称,将允许插入和更新它,但如果该行中的任何其他列未更改,则不会更新该行。

这似乎是一个矛盾。如何将行标记为已更新或未更新?有没有办法发现,以便我可以正确设置

latestUpdate
列? 结论:

BulkInsertOrUpdate(Entities, new BulkConfig()
{

    PropertiesToExcludeOnCompare = new List<string>()
    {
        nameof(BaseEntity.LatestUpdate)
    },
    PropertiesToExcludeOnUpdate = new List<string>()
    {
        nameof(BaseEntity.CreationTime)
    }

});

适用于

CreationTime
,但不适用于
LatestUpdate

.net sql-server entity-framework efcore.bulkextensions
1个回答
0
投票

我尝试使用批量配置PropertiesToExcludeOnCompare 填写 DateTime.Now 后。但这个选项总是 将我的 LastUpdate 字段更新为 Now,无论其他列是否已更新 更新与否。

确保当您调用方法 DateTime 时,已存在并且您不会对其进行任何更新的

entities
不会在
CreationTime
上初始化新的
BulkInsertOrUpdate
值。

PropertiesToExcludeOnCompare
列表中,
CreationTime
未添加,这意味着如果您初始化它,即
public DateTime CreationTime { get; set; } = DateTime.Now;
(值现在与数据库中的值不同)并继续调用
BulkInsertOrUpdate
该记录的所有字段都将在数据库中更新,当然
CreationTime
除外,因为它已被
PropertiesToExcludeOnUpdate
排除。

如果是这种情况,解决方案是将其添加到

PropertiesToExcludeOnCompare
列表中。

© www.soinside.com 2019 - 2024. All rights reserved.