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

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

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

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

enter image description here

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

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

Ответ 1

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

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

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

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

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

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

ИЗМЕНИТЬ

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

Ответ 2

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

Ответ 3

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

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

Ошибка 3027: сопоставление не определено для следующего EntitySet/AssociationSet [имя сущности или ассоциации]

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

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

поэтому, короче говоря, решение таково: "Не забывайте Генерировать модель базы данных каждый раз после обновления вашего EDM, если вы делаете первую модельную модель. Надеюсь, ваша проблема решена".

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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


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

Ответ 7

Более быстрый способ для меня состоял в том, чтобы удалить таблицы и снова добавить их. Он автоматически сопоставил их.:)

Ответ 8

  • Перейдите в Обозреватель решений, нажмите кнопку "Поиск"
  • Оставьте отмеченным как Search within file content, так и Search External Files
  • Введите имя объекта, которое ваше сопоставление не распознает.
  • Удалить все файлы, связанные с проблемой. Вероятно, они будут названы в честь того же пропавшего объекта. НЕ удаляйте файл с вашим именем класса контекста в файле, особенно если их расширения -.cs или .tt. В файле Context.cs.
  • удалите все строки кодов, ссылающиеся на отсутствующий объект. Они будут выглядеть так:

    public virtual DbSet< Entity1> Entity1 { get; set; }
    

Эта ошибка является общей для таблиц, удаленных из базы данных.

Когда вы удаляете таблицу в базе данных или просто меняете web.config.connectionStrings для базы данных, привязанной к EF, указывать на новую, а не ту, которая используется для генерации исходных сопоставлений, является проблемой.

Именно этот новый db эти объекты с ошибкой 3027 отсутствуют.

Ответ 9

Была ли эта ошибка, когда я удалил таблицу из базы данных. Выбрав его, щелкнув правой кнопкой мыши по диаграмме EDMX, перейдите в "Свойства", выбрав таблицу из списка в окне "Свойства" и удалив ее (используя клавишу удаления) из диаграммы.

Ответ 10

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

Решение заключалось в том, что я просто сделал сложный тип в браузере модели и назначил его в результате "Импорт функций редактирования".

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

Ответ 11

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

Ответ 12

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