Проблема в отображении фрагментов в Entity Framework - PullRequest
12 голосов
/ 27 января 2011

Я использую 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, и я не понимаю, что происходит или в чем проблема.

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

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

Ответы [ 3 ]

28 голосов
/ 07 марта 2013

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

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

  • Person
  • Address
  • PersonAddress (содержит только PersonID и AddressID)

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

5 голосов
/ 28 января 2011

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

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

0 голосов
/ 26 июня 2019

PK InitiatingUser; ПК IgnoredUser

два первичных ключа не могут позволить edmx file.so создать столбец sno в этой таблице и сделать его первичным ключом. удалить ПК из InitiatingUser и IgnoredUser. теперь в этих двух столбцах нет доступного первичного ключа.

как

Пк сно; FK InitiatingUser; FK IgnoredUser

...