До сих пор я читал документы, учебные пособия, подготовленные Google, и другие вопросы SO, но, похоже, я что-то пропустил, и у меня это не получилось (для работы).
Я пытаюсь реализовать действительно крошечную базу данных PostgreSQL для веб-API .NET Core 2.1 (микросервиса). Я привык к первому подходу к базе данных, но для этой услуги я решил сначала попробовать код.
Я также решил использовать свободный API ModelBuilder, чтобы уберечь классы от атрибутов и определить большую часть структуры в методе DbContext.OnModelCreating. Энди, возможно, однажды найдет решение, как очистить DbContext от конкретных элементов Postgres и переместить их в миграции ...
Моя проблема в том, что требования определяют множество значений по умолчанию, и я не могу заставить их работать так, как они должны себя вести.
Например, у меня есть таблица Entity1, в которой всего 3 столбца:
- int Id (автоматически увеличивающийся идентификатор)
- булево? IsEnabled (который должен получить значение по умолчанию true)
- DateTime? LastStatusChange (отметка времени без часового пояса, которая должна быть установлена при создании или обновлении до значения по умолчанию CURRENT_TIMESTAMP)
Идея значения по умолчанию для метки времени состоит в том, чтобы база данных была единственным экземпляром, создающим метки времени и использующим значения по умолчанию db в качестве конфигурации для всех запущенных экземпляров. Например. когда требования изменяются на «значение по умолчанию теперь должно быть ложным», мы просто изменяем значения по умолчанию db в существующих базах данных и обновляем миграцию для новых частей.
Мой код modelBuilder в настоящее время:
modelBuilder.Entity<Entity1>(entity =>
{
entity.HasKey(e => e.Id);
entity.Property(e => e.Id)
.ValueGeneratedOnAdd();
entity.Property(e => e.IsEnabled)
.HasDefaultValue(true)
.ValueGeneratedOnAddOrUpdate();
entity.Property(e => e.LastStatusChange)
.HasColumnType("timestamp without time zone")
.HasDefaultValueSql("CURRENT_TIMESTAMP")
.ValueGeneratedOnAddOrUpdate();
});
Что работает для новых созданных ценностей.
При переключении или сбросе полей, которые я использую
entity.LastStatusChange = null;
и или
entity.IsEnabled = null;
Я предположил, что установка для них значения null вызовет создание значения по умолчанию, но это не влияет на поле LastStatusChange (значение остается прежним) и устанавливает IsEnabled в значение null.
В любом случае, чтобы получить значения по умолчанию db при обновлении через ядро entity framework?