Как настроить столбец Identity с помощью Entity Framework Core?

Как создать столбец идентификатора с автоинкрементом в Entity Framework Core?

Очевидно, что я могу сделать это, используя свободный API для EF6, например.

Ответ 1

Поскольку документации EF7 очень мало, многое из того, что мы знаем, мы должны извлечь из исходных или модульных тестов. Согласно следующим двум модульным тестам в источнике EF7...

Здесь и Здесь

Вы можете настроить свойство для удостоверения следующим образом:

b.Property(e => e.Id).ForSqlServer().UseIdentity();

И вы должны настроить свойство для последовательностей следующим образом:

ForSqlServer().UseSequence();

URL-адреса изменились из-за реорганизации ядра aspnet, и методы также изменились с тех пор, как об этом впервые спросили.

Здесь и Здесь

if (_useSequence) 
{
    b.Property(e => e.Identifier).ForSqlServerUseSequenceHiLo();
} 
else 
{
    b.Property(e => e.Identifier).UseSqlServerIdentityColumn();
}

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

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

ОБНОВЛЕНИЕ: Обновлены ссылки на версию 2.1 (все еще работает для 1.1 и 2.0)

Ответ 2

В последней версии EF7 появился новый метод расширения для установки столбца идентификаторов

protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
  modelBuilder.Entity<MyEntity>(b =>
  {
    b.HasKey(e => e.Identifier);
    b.Property(e => e.Identifier).ValueGeneratedOnAdd();
  });
}

Ответ 3

С последними битами EF Core 1.0 и выше вы должны использовать

builder.Entity<ApplicationUser>().Property<int>(nameof(ApplicationUser.AccountNo))
            .UseSqlServerIdentityColumn()

Ответ 4

Вот как это сделать явно в случае, если вы хотите ИЛИ это не поведение по умолчанию.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
  modelBuilder.Entity<MyEntity>(b =>
  {
    b.Key(e => e.Identifier);
    b.Property(e => e.Identifier).ForSqlServer().UseIdentity();
  }
}