Как настроить столбец идентификатора ключа в Entity Framework 7?

У меня есть следующий Mapper в Entity Framework 7 RC1:

  b.ToTable("Categories");
  b.HasKey(x => x.Id);
  b.Property(x => x.Id) ... ??

Как сделать столбец идентификатора и идентификатора в EF 7 RC1?

Эквивалент SQL:

Id int identity not null

Я читал, что это будет так:

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

Но в EF7 RC1 я не нахожу ForSqlServer(). Я нахожу:

.ForSqlServerHasComputedSql()
.ForSqlServerHasColumnName()
.ForSqlServerHasColumnNameType()
.ForSqlServerHasDefaultValue()
.ForSqlServerHasDefaultValueSql()
.ForSqlServerUseSequenceHiLo()
...

person Miguel Moura    schedule 16.12.2015    source источник


Ответы (2)


Вы можете явно настроить столбец идентификаторов, позвонив.

b.Property(x => x.Id).UseSqlServerIdentityColumn();

Также стоит отметить: identity — это шаблон генерации значений по умолчанию, используемый с первичными ключами. Использование последовательностей не является обязательным.

person natemcmaster    schedule 17.12.2015
comment
Последовательности являются альтернативой идентичности. См. stackoverflow.com/questions/10062328/sequence-vs-identity. EF поддерживает оба варианта, но по умолчанию использует идентификатор. - person natemcmaster; 18.12.2015

Ответ natemcmaster правильный. Вы можете определить с помощью fluentAPI или также можете использовать аннотацию данных [Key] для определения первичного ключа.

Однако есть несколько способов определить значение идентификатора в EF Core. Вы можете использовать идентификатор (по умолчанию), Sequence и HiLo Pattern с Sequence. Идентификация по умолчанию. На самом деле вам не нужно определять его как столбец идентификаторов, если имя вашего свойства заканчивается на Id или ‹typeName› Id. EF Core по соглашению настраивает свойство с именем Id или ‹typeName›Id в качестве ключа сущности.

И причина того, что имя метода расширения начинается с ForSqlServer, заключается в том, что EF Core поддерживает множество поставщиков баз данных. И функциональные возможности этих поставщиков немного отличаются, поэтому вы можете указать различное поведение для одного и того же свойства в зависимости от используемого поставщика.

Прочтите эту статью, чтобы узнать больше об использовании Последовательность с EF Core и HiLo с ядром EF.

person VirendraJ    schedule 15.09.2016
comment
это заглавная К, [Key] - person Serj Sagan; 24.10.2016