15 мая 2014
Кравченко Виктор

Автогенерация значений типа uniqueidentifier (GUID) в MVC Entity Model (VB.NET, MS SQL 2008R2)

VB.NET MVC 4 ASP.NET MS SQL
01

Допустим вы создали некую базу данных с таблицей, в которой есть поле с типом uniqueidentifier — оно выполняет роль идентификатора.

02 Задача:
Необходимо, чтобы при добавлении новой строки в таблицу полю с типом uniqueidentifier значение присваивалось автоматически.
03

Сложность заключается в том, что конструкция вида SomeEntity.UID = Guid.NewGuid() не может гарантировать отсутствия вновь сгенерированного ключа в базе, поэтому с ростом количества строк в таблице вероятность наткнуться на такой же ключ, хоть и незначительно, но начинает расти.

04

Для решения этой проблемы нужно предпринять 3 действия:

05
  • В таблице SQL (в среде, например, MS SQL Management Studio 2008 R2) — в свойстве DefaultValue столбца с типом uniqueidentifier указать (newid())
  • В коде (MVC-проекта):
06 VB.NET
1
SomeEntity.UID = Guid.NewGuid()
07
  • В дизайнере MVC Entity Model Designer: Необходимо в свойстве StoreGeneratedPattern столбца с типом uniqueidentifier указать Identity
08 На заметку:
StoreGeneratedPattern – перечисление, которое задает три параметра, показывающие, требует ли столбец в SSDL значения в ходе операций вставки и обновления. ADO.NET считывает значение столбца, а затем сохраняет его в кэше памяти.
Computed Значение генерируется как при вставке, так и при обновлении.
Identity Значение генерируется при вставке, а при обновлении остается без изменения.
None Значение, показывающее, что это свойство не сгенерировано сервером. Это значение по умолчанию.
09

Похожие запросы:

  • Using sequential guids as identifiers in Entity Framework
  • Entity Framework 5 — Auto incremental GUID columns
  • Using uniqueidentifier SQL column type with Entity framework
  • How to use Default column value from DataBase in Entity Framework?
  • Entity Framework 4 and SQL UniqueIdentifier Bug
comments powered by HyperComments