Entity Framework заменяет идентификатор моего объекта - PullRequest
1 голос
/ 29 октября 2011

Я использую Entity Framework 4.1

У меня есть обычный объект, и я установил его идентификатор как что-то вроде 123456789 (длинное значение)

Затем я вызываю SaveChanges ()

проблема в том, что SaveChanges () меняет мой идентификатор как в памяти, так и внутри базы данных это присваивает идентификатор 20

и если я повторю это, он назначит идентификатор 21 и т. Д.

Что может вызвать это поведение? и что я должен сделать, чтобы решить это?

Объявление ID: public long ID {get; задавать; }

Он работал раньше, он мог работать раньше, когда идентификатор был объявлен как int (верните его, чтобы проверить, слишком ли велика модификация ..)

Спасибо

Ответы [ 2 ]

4 голосов
/ 29 октября 2011

проблема в том, что SaveChanges () меняет мой идентификатор как в памяти, так и внутри базы данных он назначает идентификатор 20

Скорее всего, столбец идентификатора в базе данных является Столбец идентификатора , поэтому идентификатор назначается базой данных, а не вами. Если вы действительно хотите присвоить значение Id самостоятельно, удалите свойство Identity столбца.

Предполагая, что вы сначала не используете код и работаете с Sql Server, откройте таблицу в SQL Server Management Studio и перейдите к свойствам столбца для столбца ID - выберите «(Идентификационные данные) - Нет».

enter image description here

Edit:

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

  [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]

на имущество ID. Есть ли конкретный вариант использования , почему вы хотите это сделать? Обычно проще позволить базе данных обрабатывать уникальность ключа.

2 голосов
/ 29 октября 2011

Следующая аннотация для ключа в вашем классе должна исправить это для вас

[DatabaseGenerated(DatabaseGenerationOption.None)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...