Проблема с отображением фрагментов в Entity Framework

Я использую структуру сущностей и столкнулся с странной ошибкой сборки.

Я создаю форум и создаю таблицу в базе данных для «игнорирует», когда люди не любят друг друга, они будут игнорировать кого-то. Таблица состоит из двух столбцов, и вместе они являются первичными ключами.

PK InitiatingUser
PK IgnoredUser

Когда EF отображает эту таблицу, я получаю эту ошибку:

Ошибка 7 Ошибка 3034: Проблема при сопоставлении фрагментов, начинающихся со строк 1467, 1477: две сущности с возможно разными ключами сопоставлены с одной и той же строкой. Убедитесь, что эти два фрагмента сопоставления сопоставляют оба конца AssociationSet с соответствующими столбцами.

Я открыл edmx в редакторе xml и перешел к ошибочным строкам.

          <MappingFragment StoreEntitySet="Ignores">
            <ScalarProperty Name="IgnoredUser" ColumnName="IgnoredUser" />
            <ScalarProperty Name="InitiatingUser" ColumnName="InitiatingUser" />
          </MappingFragment>

Я только начинаю работать с EF и не понимаю, что происходит и в чем может быть проблема.

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ Связи между игнорированием, используемые для того, чтобы внешние ключи сопоставляли как инициирующего пользователя, так и игнорируемого пользователя с первичным ключом (именем пользователя) таблицы пользователей. Так было, когда я впервые сопоставил EF с этой таблицей. С тех пор я удалил FK, чтобы посмотреть, поможет ли это, но этого не произошло.


comment
Как выглядят отношения в БД?   -  person bzlm    schedule 27.01.2011
comment
См. Мою редакцию отношений.   -  person Chev    schedule 27.01.2011


Ответы (3)


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

Итак, например, допустим, у вас есть следующие таблицы:

  • Человек
  • Адрес
  • PersonAddress (содержит только PersonID и AddressID)

В вашей модели сущности вы должны добавить только Person и Address. Если вы добавите PersonAddress, EF выдаст ошибку. Согласно это MSDN Q&A, EF автоматически учтет объединенную таблицу.

person Shauna    schedule 07.03.2013
comment
Как раз то, что у меня было не так с моей моделью, я слепо добавил все таблицы из базы данных, забыв, что отношения M: N обрабатываются EF. - person juhan_h; 23.07.2013
comment
Ваш ответ спас меня. Дважды. - person tia; 02.09.2015

Я не знаю, что здесь не так, но я просто удалил таблицу из ORM, а БД воссоздала ее с фактическим столбцом идентификатора вместо двух первичных ключей. Я заново отобразил таблицу, скомпилировал, и теперь все в порядке. Удобно было бы сделать так, как у меня, ну да ладно.

Если у кого-то есть понимание, дайте мне знать. Я лучше приму чей-то ответ.

person Chev    schedule 27.01.2011
comment
понимание: он, вероятно, пытается сохранить любые изменения, которые вы внесли в модель, вместо того, чтобы просто слепо топать по всему, чтобы воссоздать все это. Тем не менее, ваш ответ решил мою проблему. - person gbjbaanb; 12.08.2013

PK InitiatingUser; PK IgnoredUser

два первичных ключа не могут разрешить файл edmx. поэтому создайте столбец sno в этой таблице и сделайте его первичным ключом. удалите pk для InitiatingUser и IgnoredUser. теперь в этих двух столбцах нет доступного первичного ключа.

как

Pk sno; FK InitiatingUser; FK IgnoredUser

person MOHAN RAJ P    schedule 26.06.2019