Сгенерировать автоинкрементный столбец int в MariaDB с помощью EFCore - PullRequest
1 голос
/ 11 июля 2019

Проблема:

Я пытаюсь создать таблицу с efcore в .netcore 2.2, используя codefirst с целочисленным первичным ключом с автоинкрементом, начинающимся с 0. Все найденные решения приводят либо к ошибке при добавлении миграции, либо к работе с автоинкрементом, но начать с int.MinValue.

Все следующие решения были опробованы отдельно, а не вместе:


Решение 1:

Ничего не делать. Просто позвольте efcore делать то, что по умолчанию.

-> Столбец автоматически увеличивается, но начинается с int.MinValue


Решение 2:

установка аннотации "[DatabaseGenerated(DatabaseGeneratedOption.Identity)]" на первичном ключе.

-> Столбец автоматически увеличивается, но начинается с int.MinValue


Решение 3:

modelBuilder.Entity<User>()
    .Property(u => u.Id)
    .ValueGeneratedOnAdd();

-> Столбец автоматически увеличивается, но начинается с int.MinValue


Решение 4:

modelBuilder.HasSequence<int>("User_seq")
    .StartsAt(0)
    .IncrementsBy(1);

modelBuilder.Entity<User>()
    .Property(u => u.Id)
    .HasDefaultValueSql("NEXT VALUE FOR User_seq");

-> Добавление миграции завершается с ошибкой:

    "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SEQUENCE User_seq START WITH 0 INCREMENT BY 1' at line 1"




Решение 5:

изменение типа данных Id на uint.

-> Столбец автоматически увеличивается, но начинается с int.MaxValue





Мой пользователь:


    public class User
    {
        public int Id { get; set; }
        public string FirstName{ get; set; }
        public string LastName { get; set; }
    }




Используется поставщик: Pomelo.EntityFrameworkCore.MySql


Чтобы прояснить мой вопрос: Как создать автоматически увеличивающийся столбец первичного ключа с целым числом, начиная с 0, увеличивая его на 1 в MariaDB, используя efcore codefirst?

1 Ответ

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

Вы не можете.

MariaDB (MySQL) рассматривает 0 как значение для создания нового значения AUTO_INCREMENT.

Не принимайте свойства AUTO_INCREMENT, которые оно не предоставляет.Это только говорит о том, что каждое новое значение будет отличаться от существующих значений.

Возможно int.MinValue - это какое-то большое отрицательное значение (-2 ^ 31).

...