我必须填写 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
我尝试使用批量配置PropertiesToExcludeOnCompare 填写 DateTime.Now 后。但这个选项总是 将我的 LastUpdate 字段更新为 Now,无论其他列是否已更新 更新与否。
确保当您调用方法 DateTime
时,已存在并且您不会对其进行任何更新的
entities不会在
CreationTime
上初始化新的 BulkInsertOrUpdate
值。
在
PropertiesToExcludeOnCompare
列表中,CreationTime
未添加,这意味着如果您初始化它,即
public DateTime CreationTime { get; set; } = DateTime.Now;
(值现在与数据库中的值不同)并继续调用 BulkInsertOrUpdate
该记录的所有字段都将在数据库中更新,当然 CreationTime
除外,因为它已被 PropertiesToExcludeOnUpdate
排除。
如果是这种情况,解决方案是将其添加到
PropertiesToExcludeOnCompare
列表中。