Как запустить подзапрос при вставке в таблицу в EFCore - PullRequest
1 голос
/ 12 июня 2019

У меня есть столбец orderid integer в таблице Postgres с именем Orders, и это не первичный ключ. И есть логика, чтобы автоматически увеличивать его, учитывая максимальное значение orderid и добавляя к нему 1.

Одним из решений этой проблемы является создание функции на уровне базы данных и установка ее в качестве значения по умолчанию для этого столбца. Но так как это связывает нас с уровнем базы данных, мы думаем о чем-то, что связано с EF. Мы не можем передать SQL в качестве значения по умолчанию orderid, потому что postgres выдает ошибку. Мы также можем сделать это автоинкрементным значением, но мы не хотим этого делать, потому что логика может измениться.

Нам нужен способ запустить этот подзапрос и автоматически сгенерировать значение для orderid.

1 Ответ

0 голосов
/ 12 июня 2019

Я предполагаю, что здесь вы хотите сохранить отдельный не-первичный ключ, автоматически увеличиваемый уникальный идентификатор, который является числом. Вы можете сделать это с помощью последовательности.

1) Создайте последовательность через свободный API

2) Установите в столбце следующее значение из последовательности

3) Обязательно создайте и запустите миграции перед тестированием.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.HasSequence<int>("OrderNumbers")
                .StartsAt(1000)
                .IncrementsBy(1);

    modelBuilder.Entity<Order>()
                .Property(o => o.OrderNo)
                .HasDefaultValueSql("nextval('\"OrderNumbers\"')");
}
...