2013-06-24 3 views
0

Я создаю новый EntityObject, который не существует в базе данных (SQLite). Я заполняю свойства объекта и присоединяю его к родительскому объекту. Я не заполняю свойство первичного ключа, потому что, насколько я понимаю, EF должен автоматически генерировать временный EntityKey для меня. Затем я использую метод AddObject для добавления вновь созданного объекта EntityObject в контекст, после чего я вызываю SaveChanges.Временный EntityKey не сгенерирован

Я получаю UpdateException: Прерывание из-за нарушения ограничений ПЕРВИЧНЫЙ КЛЮЧ должен быть уникальным. Я вижу, что свойство первичного ключа всегда равно 0, хотя это должно быть следующее доступное значение в базе данных, не так ли? Я проверил, что в базе данных поле первичного ключа выполняется автоинкремент.

Что мне делать, чтобы получить EF, чтобы дать мне временный EntityKey?

ответ

0

EF не создает временные ключи для вас. Вам нужно будет создать временный ключ самостоятельно.

Что вы можете сделать: добавьте свойство в свою модель, украшенную атрибутом [NotMapped]. При создании объекта это значение должно быть инициализировано значением. Guids решить проблему мелко. Вам просто нужно использовать Guid.NewGuid() для создания временного ключа для вас.

[NotMapped] гарантирует, что поле не будет сохраняться в базе данных.

+0

Здесь проблема была в самой базе данных. Он не автоматически активировал первичный ключ в таблице базы данных, и этот случай теперь разрешен. – Nuts