DatabaseGenerated (DatabaseGeneratedOption.Identity) против ключа - PullRequest
0 голосов
/ 13 марта 2020

Глядя сначала на код, я вижу несколько примеров, которые используют [DatabaseGenerated(DatabaseGeneratedOption.Identity)] для обозначения первичного ключа, и другие примеры, которые используют [Key].

Я не смог найти описание того, как эти два сравниваются.

Может кто-нибудь сказать мне, когда / если я захочу использовать один поверх другого?

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Столбец идентификации в базе данных (и DatabaseGeneratedOption.Identity) означает, что столбец генерирует значение автоматически при вставке. Обычно это столбцы типа int и аналогичные с автоинкрементом.

  • ВСТАВКА для строки, в которой используется столбец идентификаторов, пропускает значение из запроса (созданного базой данных)

С другой стороны, только потому, что столбец первичный ключ не означает, что это столбец идентификаторов. Во многих случаях вы не хотите, чтобы база данных автоматически генерировала значение для столбца. И типы данных, которые не могут быть столбцами идентификаторов.

  • INSERT для строки, которая представляет собой PK, но не столбец идентификаторов, почти всегда указывает значение в запросе (не генерируется базой данных).

Короче говоря, вы можете считать столбец идентификаторов чем-то вроде GUID. Он однозначно идентифицирует строку, но сам по себе не является полезными данными.

Сравните это со столбцом первичного ключа "email_address", и он определенно не будет столбцом идентификаторов. Плюс это законные данные.

1 голос
/ 13 марта 2020

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

DatabaseGeneratedOption.Identity

Вы можете пометить неключевые (неидентифицированные) свойства как DB свойства с использованием опции DatabaseGeneratedOption.Identity . Это указывает, что значение свойства будет сгенерировано базой данных в операторе INSERT. Это свойство Identity не может быть обновлено.

Обратите внимание, что способ, которым значение свойства Identity будет сгенерировано базой данных, зависит от поставщика базы данных. Это может быть личность, версия строки или GUID. SQL Сервер создает столбец идентификаторов для целочисленного свойства.

Атрибут ключа

Атрибут ключа можно применить к свойству в классе сущности сделать его ключевым свойством и соответствующим столбцом для столбца PrimaryKey в базе данных. Соглашение по умолчанию создает столбец первичного ключа для свойства с именем Id или Id. Атрибут Key переопределяет это соглашение по умолчанию.

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

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...