2010-03-19 3 views
3

Я столкнулся с моим первым разочарованием с Entity Framework 4. Оказывается, что SQL CE при использовании с EF4, does not support autogenerated primary keys. Я получаю System.Data.UpdateException из OnjectContext.SaveChanges() с этим сообщением:Генерирование ключей сущностей

Серверные ключи и генерируемые сервером значения не поддерживаются SQL Server Compact.

Итак, теперь мне нужно вручную генерировать ключи для моих объектов. Предполагая, что я хочу использовать автоматические инкрементные целые ключи, каков наилучший способ генерации и отслеживания ключей при использовании Entity Framework? Спасибо за вашу помощь.

ответ

4

В нижней части ссылки в вашем ответе предлагается решение. См. SQL Compact, Identity Columns and Entity Framework, возможно, вам может понадобиться реализовать метод расширения, подобный описанному.

+0

Это замечательно - спасибо! –

+0

Хороший ответ, но, к сожалению, код на связанной странице работает только для нефильтрованных наборов сущностей, поскольку метод расширения возвращает максимальный id в наборе сущностей. Итак, в конечном итоге я использовал GUID как ключ сущности. Я создал частичный класс для каждого объекта с этим кодом конструктора: this.ID = Guid.NewGuid() –

0

Я не думаю, что идея Дэвида - хорошая идея, однако у меня нет выбора. Возможно, CE будет поддерживать автоматически генерируемые первичные ключи в следующей версии.

+2

Фактически, SQL Compact поддерживает автогенерированные ключи - по-видимому, это EF4, который не поддерживает автоматически генерируемые ключи из SQL Compact. Сообщение в блоге, связанное в моем исходном вопросе, объясняет проблему. –