EF Code First - как установить тождественное семя? - PullRequest
30 голосов
/ 12 мая 2011

У меня есть класс сущностей

public class Employee
{
    public long Id { get; set; }
    public string Name { get; set; }
}

Я установил поле Id в качестве первичного ключа с автоматической генерацией номеров

modelBuilder.Entity<Employee>().HasKey(e => e.Id);
modelBuilder.Entity<Employee>().Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

Но я хочу, чтобы Identity заполнилась вместо 10000из от 1, который является значением по умолчанию.Как я могу указать это в EF?

Ответы [ 4 ]

32 голосов
/ 12 мая 2011

Если вы используете SQL Server, вы должны создать пользовательский инициализатор базы данных и вручную выполнить DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue). Для создания и использования пользовательского инициализатора с пользовательскими командами SQL отметьте этот ответ .

15 голосов
/ 21 января 2016

Исходя из ответа Ладислава Мрнки, вы можете добавить это в свой файл миграции Up метод:

Sql("DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)");
0 голосов
/ 03 сентября 2018

Определенно можно получить тот же вывод, что и для идентификатора, равного 1000, выполнив сценарий "DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)" из сценария переноса метода Up.

Однако в определении таблицы в SQL Server по-прежнему отображается «IDENTITY (1,1)», даже если первая запись, введенная в таблицу, получает идентификатор 1000. Это означает, что начальное значение идентификатора таблицы на самом деле не задано до 1000. Это просто, что начальные 999 значений используются или пропускаются при создании первой записи, конечно, потому что вы запускаете команду RESEED для БД, т.е. вы изменяете SEED, который уже был установлен.

В заключение, похоже, что в ядре EF v2.1 Microsoft не предоставила возможность настройки начального значения идентификатора при создании таблицы. Будем надеяться, что в будущих версиях EF Core, вероятно, 2.2 или 3.0 будет эта функция. Мысли ...

0 голосов
/ 31 декабря 2017

на основе @ ehsan88 вы можете создать класс инициализации базы данных

 public class AccDatabaseInitializer : CreateDatabaseIfNotExists<YourContect>
    {
      protected override void Seed(YourContect context)
       {
          context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)");
           context.SaveChanges();
       }
    }

спасибо

...