EFCore CreatedAt Fields значения по умолчанию - PullRequest
0 голосов
/ 05 апреля 2020

Я использую 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;
                }
            }
        }
    }
...