EF возвращает 0000-0000-0000-xxx как Guid, когда я пытаюсь сохранить новую запись или обновить существующую запись? - PullRequest
2 голосов
/ 24 августа 2011

Я использую EF4 в своем проекте C #. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь сохранить запись, я получаю Нарушение первичного ключа и значение PK равно «0000-0000-0000-xxx». На мой взгляд, EF не распознает флаг IsIdentity и генерирует значение guid. В моей базе данных SQL Server для моей таблицы я указываю PK (uniqueidentifier> guid), а также задаю его как IdentityColumn, поэтому я ожидаю, что это будет проходить в моем проекте как таковом, поскольку guid генерируется в SQL Server. Есть ли способ преодолеть эту ошибку?

Ответы [ 2 ]

9 голосов
/ 24 августа 2011

Вы должны указать свой Guid ID в качестве идентификатора в вашей модели EF. В EF 4.1:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }

(Guid Идентификаторы не являются идентичностями по умолчанию, в отличие от int Идентификаторы.) Если вы создадите базу данных с этой моделью, EF создаст столбец со значением по умолчанию newid().

В EF 4.0 вы можете перейти к конструктору модели, отметить свой идентификатор в конструкторе, открыть окно свойств и затем установить StoreGeneratedPattern на Identity.

3 голосов
/ 24 августа 2011

Вместо этого:

public System.Guid ID { get; set; }

Попробуйте это:

private System.Guid _id;
public System.Guid ID
{
    get
    {
        if (_id == null || _id == Guid.Empty)
            _id = Guid.NewGuid();
        return _id;
    }
    set
    {
        _id = value;
    }
}
...