Почему я получаю эту ошибку: не указано сопоставление для следующего EntitySet / AssociationSet - Entity1? - PullRequest
90 голосов
/ 14 апреля 2011

Я использую Entity Framework 4 с подходом Model First.

Я запустил проект, спроектировал сущности и создал базу данных.Все работало нормально.

Затем мне нужно было вернуться и добавить еще одну сущность в мою модель.Однако, когда я перетаскиваю объект в EDMX, я получаю эту ошибку:

enter image description here

Хорошо!Мне просто нужно сопоставить Entity1 с таблицей .. Но эй!Я использую подход Model First, я ожидаю, что он создаст таблицу для меня при генерации DDL.

Как мне обойти эту ошибку?

Ответы [ 14 ]

141 голосов
/ 14 апреля 2011

Это связано с тем, как EF4 работает с моделью-первой.

Когда вы впервые создаете модель сначала модель, она находится в состоянии, когда SSDL не существует. Вы можете перетаскивать объекты, связывать их и т. Д. И все же, если вы посмотрите на SSDL в файле EDMX, вы увидите, что ни один из объектов не имеет связанной таблицы хранения в SSDL.

Это меняется, когда вы нажимаете пункт контекстного меню Generate Database From Model. Смущает то, что это действие не просто генерирует сценарий DDL. Фактически, он изменяет файл EDMX для включения информации SSDL. С этого момента файл EDMX войдет в состояние, в котором каждый объект в конструкторе / CSDL должен отображаться на объект в SSDL. Если он не отображается, он вызовет ошибку времени компиляции:

Не указано сопоставление для следующего EntitySet / AssociationSet - (EntityName)

Еще один интересный факт заключается в том, что это не та ошибка, которая помешает компиляции. Это действительно сгенерирует выходную библиотеку классов. Разве это не должно быть предупреждением или чем-то еще?

Чтобы предотвратить эту ошибку, все, что вам нужно сделать после вставки новой сущности, это снова набрать Generate Database From Model. Это обновит SSDL и исправит сопоставления.

EDIT

Если вы не используете модель в первую очередь и «обновляете из базы данных», у вас также будет эта ошибка в случае, если вы удалили таблицу в DB Server. Это потому, что Entity Framework не будет автоматически удалять объект для вас. Удалите объект вручную, и ошибка исчезнет.

35 голосов
/ 16 августа 2013

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

21 голосов
/ 07 апреля 2015

Ошибка 3027: не указано сопоставление для следующего EntitySet / AssociationSet ... "- Головные боли Entity Framework

Если вы разрабатываете модель с Entity Framework, вы можете время от времени сталкиваться с этой досадной ошибкой:

Ошибка 3027: не указано сопоставление для следующего EntitySet / AssociationSet [Entity или Association Name]

Это может не иметь смысла, когда на EDM все выглядит нормально, но это потому, что эта ошибка обычно не имеет ничего общего с EDM. То, что он должен сказать, это «восстановить файлы базы данных».

Видите ли, сущности проверяют SSDL и MSL во время сборки, поэтому, если вы только что изменили свой EDM, но не используете Создать модель базы данных ... , то он жалуется, что в вашем sql отсутствует материал скрипты.

Итак, короче говоря, решение: «Не забывайте генерировать модель базы данных каждый раз после обновления вашей EDM, если вы разрабатываете модель сначала. Я надеюсь, что ваша проблема решена».

7 голосов
/ 26 ноября 2014

В моем случае другой разработчик удалил некоторые таблицы из базовой базы данных.Когда я понял это и удалил эти таблицы из сущности, проблема была решена.Не было так очевидно, как кажется.

6 голосов
/ 07 октября 2014

Я столкнулся с той же ошибкой, но сначала не использовал модель. Оказалось, что мой EDMX-файл содержал ссылку на таблицу, хотя в конструкторе он не отображался. Интересно, что когда я выполнял текстовый поиск по имени таблицы в Visual Studio (2013), таблица не была найдена.

Чтобы решить эту проблему, я использовал внешний редактор, чтобы найти ссылку на поврежденную таблицу в файле EDMX, а затем (осторожно) удалил все ссылки на таблицу. Мне жаль говорить, что я не знаю, как файл EDMX попал в это состояние.

4 голосов
/ 26 февраля 2016

У меня произошла смена таблицы, и она создала другую сущность с номером 1 в конце (например, MyEntity1 и MyEntity), что подтверждается браузером модели edmx.Что-то в двух сущностях вместе запутало обработку.

Удаление таблицы и ее повторное добавление исправили ее.


Обратите внимание, что если подключена TFS, то выполнитерегистрация в edmx после удаления.Тогда и только тогда получите последнюю версию и повторно добавьте ее в определенный двухступенчатый процесс.В противном случае TFS запутается с удалением и повторным добавлением одноименного объекта (ов), что, похоже, вызывает проблемы.

3 голосов
/ 22 марта 2016

Для меня более быстрым способом было удалить таблицы и добавить их заново. Это Авто-картировал их. :)

1 голос
/ 26 октября 2017

Для тех, кто использует Database First подход, все, что вам нужно сделать после вставки новой сущности, это снова Generate Database From Model, щелкнув правой кнопкой мыши на файле .edmx и выбрав Generate Database From Model...

0 голосов
/ 09 октября 2018

Поделиться этим с другими людьми. В моем случае мы работали над общим решением MVC и использовали общий модуль для таблиц, который мы используем для раскрывающихся списков. Я получил ошибку, когда обновил модель сущности, добавив новую таблицу. Оказывается, когда я обновил EDMX, он, вероятно, обновил мои права доступа к базе данных, что привело к тому, что у меня не было доступа к этой определенной таблице, что дало мне no mapping specified.

Просто повторное добавление и предоставление доступа моему пользователю решило проблему.

0 голосов
/ 28 июня 2018

Обновление модели из базы данных не работает для меня.

Мне пришлось удалить конфликтующий объект, затем выполнить обновление модели из базы данных и, наконец, перестроить решение. После этого все отлично работает.

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