Почему я получаю эту ошибку: сопоставление не указано для следующего 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...