Entity Framework - объект с составным первичным ключом - PullRequest
1 голос
/ 28 августа 2011

Я использую Entity Framework 4, и недавно я изменил первичный ключ одного объекта, чтобы он содержал 2 столбца вместо 1 (раньше он имел только свой идентификатор - Guid - и теперь у него есть идентификатор и версия - инт).

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

Изменения в базе данных были успешно зафиксированы, но произошла ошибка произошло при обновлении контекста объекта. ObjectContext может быть в противоречивом состоянии. Внутреннее сообщение об исключении: AcceptChanges не может продолжаться, потому что значения ключа объекта конфликтуют с другим Объект в ObjectStateManager. Убедитесь, что значения ключей уникальный перед вызовом AcceptChanges.

Я посмотрел в базе данных, и у меня есть 2 объекта с одинаковым идентификатором, но с разными версиями, как я и предполагал.

Как заставить EF взаимодействовать с этими настройками?

Настройка сущности из файла edmx:

 <EntityType Name="Test">
     <Key>
         <PropertyRef Name="TestID" />
         <PropertyRef Name="TestVersion" />
     </Key>
     <Property Type="Guid" Name="TestID" Nullable="false" />
     <Property Type="Int32" Name="FolderID" Nullable="false" />
     <Property Type="String" Name="Name" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="false" />
     <Property Type="Int32" Name="TestVersion" Nullable="false" />
     <Property Type="DateTime" Name="Date" Nullable="false" />
     <Property Type="String" Name="Owner" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="false" />
     <Property Type="Binary" Name="TestObject" Nullable="false" MaxLength="Max" FixedLength="false" />
     <NavigationProperty Name="Folder" Relationship="Labster7Model.FK_Tests_Folders" FromRole="Test" ToRole="Folder" />
     <Property Type="String" Name="Description" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="false" />
</EntityType>  

Я предоставлю любые другие необходимые части кода.

Edit:
Определение таблицы:
table

Гид установлен в приложении.

Редактировать 2:
У меня есть 2 таких объекта в моей БД для тестирования. Я только что увидел, что при просмотре коллекции тестов контекста один из них дублируется дважды вместо двух разных объектов (с разными версиями и датами).

1 Ответ

1 голос
/ 29 августа 2011

Удалите все таблицы внутри EMDX и добавьте их заново после обновления базы данных. Это сделает упражнение

...