Я использую 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
всегда ложно, даже если я установил его вручную. Как я могу проверить, было ли уже установлено свойство 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;
}
}
}
}