Ошибка при использовании GUID с Entity Framework - PullRequest
0 голосов
/ 01 декабря 2011

Моя таблица SQL содержит столбец Id, имеющий тип данных uniqueidentifier.Согласно совету по SO, я установил для него значение по умолчанию (newid()).

Используя сначала Entity Framework 4.2 с кодом, я затем сопоставил свое свойство Guid с соответствующим полем в SQL:

[Key]
public Guid Id { get; set; }

Однако всякий раз, когда я пытаюсь вставить объект, я получаю следующее исключение:

Тип одного из значений первичного ключа не соответствует типу, определенному всущность.

Типы аргументов 'Edm.Guid' и 'Edm.String' несовместимы для этой операции.Рядом с предикатом WHERE, строка 1, столбец 61.

Единственное решение, которое я могу найти как здесь, так и в Google, - добавить [DatabaseGenerated(DatabaseGeneratedOption.Identity)] в качестве аннотации данных к моему идентификатору.Это ничего не меняет - так что еще может быть причиной этой ошибки?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 01 декабря 2011

Вы пытались установить идентификацию StoreGeneratedPattern? Вы можете сделать это в методе OnModelCreate.

Model.Entity<Foo>().Property(o => o.Id).HasDatabaseGenerationOption(DatabaseGeneratedOption.Identity);
1 голос
/ 08 января 2013

Использование Guid в качестве первичного ключа не рекомендуется, если вам нужна производительность и индекс выше ее.Руководства генерируются со случайными значениями, поэтому каждый раз, когда вы вставляете новый элемент, SQL будет обновлять индекс больше, чем если бы вы использовали bigint (он должен вставляться в разные части индекса каждый раз, а не всегдадобавление до конца).Если вам нужен уникальный идентификатор (например, чтобы связать элементы между системами, которые не разделяют одну и ту же базу данных), просто добавьте его в качестве дополнительного столбца в таблице (и если вы параноик и желаете совершить удар по insert /обновление, вы можете дополнительно добавить уникальное ограничение над ним).

0 голосов
/ 01 декабря 2011

попробуйте

[Key]
public string  ID {get;set;}

вместо

[Key]
public Guid  ID {get;set;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...