我将EFCore 3.1用作项目的主要ORM,并尝试在保存时自动在模型上设置CreatedAt
(DateTime)属性。一切看起来都很好并且可以正常工作,但是如果创建实体时已经设置了该值,我会尝试自动跳过该值,如下所示:
s = new Session{
Visitor = v,
Property = db.Properties.Find(property_id),
CreatedAt = DateTime.UtcNow.AddSeconds(-1)
};
await this.db.Sessions.AddAsync(s);
await this.db.SaveChangesAsync();
我在数据库上下文中的功能如下。我的问题是,即使我手动设置了IsModified
值也始终为false。如何检查CreatedAt
属性是否已设置。
private void OnBeforeSaving()
{
var entries = ChangeTracker.Entries();
foreach (var entry in entries)
{
if (entry.Entity is ITrackable trackable)
{
var now = DateTime.UtcNow;
var user = GetCurrentUser();
switch (entry.State)
{
case EntityState.Modified:
trackable.LastUpdatedAt = now;
trackable.LastUpdatedBy = user;
break;
case EntityState.Added:
if (!entry.Property("CreatedAt").IsModified){ /* IsModified always false regardless */
trackable.CreatedAt = now;
}
trackable.CreatedBy = user;
trackable.LastUpdatedAt = now;
trackable.LastUpdatedBy = user;
break;
}
}
}
}