Проблема в отображении фрагментов в EF4 - PullRequest
4 голосов
/ 02 ноября 2010

У меня есть следующая модель:

alt text

Но когда я компилирую с VS2010, я получаю следующую ошибку:

Ошибка 2 Ошибка 3007: проблема в отображении фрагментов, начиная со строк 1784, 2018: столбцы (столбцы) [madeby] отображаются в обоих фрагментах в разные концептуальные свойства сторон.

Что я хочу? На самом деле я хочу, чтобы сущность Note имела FK для сущности User. Когда появляется ошибка? Когда я добавляю пользователя FK в Note, у меня появляется ошибка. Если я удалю ссылку, нет проблем. В чем проблема ? Спасибо John

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

У меня также есть сущность «Пользователь» (на основе представления) и несколько таблиц со ссылками на CreatedByUser и ModifiedByUser.

Это работает для меня, не получая ошибку "must be null":

  • На объекте «Примечание»: щелкните правой кнопкой мыши: «Добавить> Ассоциация ...».
  • Выберите «Пользователь» в качестве правой стороны «Конечный объект».
  • Поменяйте местами кратность: «Примечания» должны быть «Многие», а «Пользователь» должен быть «Один».
  • Я отменяю выбор свойства навигации справа, так как я никогда не перейду от «Пользователь» к другим таблицам, но это зависит от вас.
  • Если у вас есть свойства «CreatedBy» и «ModifiedBy», вам может потребоваться изменить имя ассоциации на что-то более значимое (например, измените «NoteUser» на «NoteCreatedByUser»
  • То же самое для свойства навигации (например, измените "Пользователь" на "CreatedByUser")
  • Оставьте флажок «Добавить свойства внешнего ключа ....» отключенным.
  • Нажмите ОК.
  • ВАЖНО: в окне «Свойства» перейдите к Ссылочная зависимость и щелкните многоточие.
  • Выберите «Пользователь» в качестве принципала.
  • Измените зависимое свойство на соответствующее значение (например, "CreatedBy")
  • Нажмите ОК.

Готово!

Снимки экрана из моего проекта ниже.

enter image description here

1 голос
/ 02 ноября 2010

Я предполагаю, что ассоциация для объекта User была определена для Имя пользователя , а Имя пользователя является ключом-кандидатом (на нем определен уникальный индекс) в SQL Server.Хотя вы можете создавать отношения на основе этой настройки в SQL Server, текущая версия EF NOT поддерживает создание ассоциаций на основе ключей-кандидатов: В EF (3.5 и 4.0)ФК ДОЛЖНЫ указывать на первичные ключи.

Единственный способ заставить эту работу - создать новое поле int внутри таблицы Note (например, ).UserId ), а затем создайте новое отношение между User.Id (PK) и Note.UserID (FK), и EF с радостью создаст для вас ассоциацию, основанную на этом.

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