提问人:GIovanni 提问时间:11/8/2023 最后编辑:GIovanni 更新时间:11/9/2023 访问量:53
使用 EFCore.BulkExtensions 库方法 BulkInertOrUpdate 时区分插入的记录和更新的记录
Distinguish between inserted and updated records when using the EFCore.BulkExtensions library method BulkInertOrUpdate
问:
我必须在我的 SQL Server 数据库表中填写 和 列。 必须在插入时,而不是必须更新为每次更新记录时。我必须批量更新大量记录,因此我想使用库方法 BulkInsertOrUpdate。
我设法通过将其默认设置为值并在其上使用批量配置来永久填充一次。
但是,我无法以正确的方式填写。CreationTime
LatestUpdate
CreationTime
DateTime.Now
LatestUpdate
DateTime.Now
EFCore.BulkExtensions
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 后。但这个选项总是 将我的 LatestUpdate 字段更新为 Now,其他列是否已 更新与否。
确保对于已经存在的实体,并且您不会在调用 method 时初始化新值。DateTime
CreationTime
BulkInsertOrUpdate
在列表中,没有添加,这意味着如果您初始化它,即(值现在与数据库中的值不同)并继续调用该记录的所有字段将在数据库中更新,当然,因为它被排除在外。PropertiesToExcludeOnCompare
CreationTime
public DateTime CreationTime { get; set; } = DateTime.Now;
BulkInsertOrUpdate
CreationTime
PropertiesToExcludeOnUpdate
如果是这种情况,那么解决方案是将其添加到列表中,以避免对数据库中存在的实体和记录进行比较。PropertiesToExcludeOnCompare
CreationTime
评论
BulkInsertOrUpdate