Почему я получаю эту ошибку: нет сопоставления, указанного для следующего EntitySet / AssociationSet-Entity1?
Я использую Entity Framework 4 С первым подходом модели.
Я начал проект, разработал объекты и сгенерировал базу данных. Все работало нормально.
затем мне нужно было вернуться и добавить еще один объект в мою модель. Однако, когда я перетаскиваю объект в EDMX, я получаю эту ошибку:
хорошо! Мне просто нужно сопоставить Entity1 с таблицей.. Но эй! Я использую модель первый подход, я ожидаю, что он создаст таблицу для меня, когда я создать ЯОД.
Как мне обойти эту ошибку?
13 ответов:
Это связано с тем, как EF4 работает с моделью-first.
при первом создании модели-первая модель, она находится в состоянии, что SSDL не существует. Вы можете перетаскивать сущности, связывать их и т. д. И все же, если вы посмотрите на SSDL в файле EDMX, вы увидите, что ни одна из сущностей не имеет связанной таблицы хранения в SSDL.
это изменяется при нажатии кнопки
Generate Database From Model
контекстного меню. Запутанная часть заключается в том, что это действие делает больше, чем просто создание DDL-скрипта. Фактически, он изменяет файл EDMX, чтобы включить информацию SSDL. С этого момента EDMX-файл будет входить в состояние, в котором каждая сущность в designer/CSDL должна сопоставляться с сущностью в SSDL. Если не сопоставить, это вызовет ошибку времени компиляции:Не указано сопоставление для следующего EntitySet / AssociationSet - (EntityName)
еще один интересный факт заключается в том, что это не та ошибка, которая будет препятствовать сборник. Он действительно будет генерировать выходную библиотеку классов. Разве это не должно быть предупреждением или чем-то еще?
чтобы предотвратить эту ошибку, все, что вам нужно сделать после вставки нового объекта, это
Generate Database From Model
снова. Это обновит SSDL и исправит сопоставления.EDIT
Если вы не используете model-first и вы "обновляете из базы данных", у вас также будет эта ошибка в случае удаления таблицы на сервере БД. Это происходит потому, что Entity Framework будет не удалять автоматически объект для вас. Удалить объект вручную, и ошибка исчезнет.
Я обнаружил, что получаю ту же ошибку, потому что я забыл создать ссылочное ограничение после создания ассоциации между двумя сущностями.
ошибка 3027: не задано сопоставление для следующих EntitySet / AssociationSet ..."- Entity Framework головные боли
Если вы разрабатываете модель с Entities Framework, то вы можете столкнуться с этой досадной ошибкой время от времени:
ошибка 3027: не задано сопоставление для следующего EntitySet / AssociationSet [имя сущности или ассоциации]
Это может не иметь смысла, когда все выглядит нормально на EDM, но это потому что эта ошибка не имеет ничего общего с EDM обычно. Что он должен сказать, это "регенерировать файлы базы данных".
вы видите, что сущности проверяют SSDL и MSL во время сборки, поэтому, если вы просто изменили свой EDM, но не используете Создать Модель Базы Данных... затем он жалуется, что в ваших SQL-скриптах не хватает материала.
Итак, короче говоря, решение: -Не забудь Создать Модель Базы Данныхкаждый раз после обновления EDM если вы делаете модель первой разработки. Надеюсь, ваша проблема будет решена".
в моем случае другой разработчик удалил некоторые таблицы из базовой базы данных. Когда я понял это и удалил эти таблицы из сущности, проблема была решена. Это было не так очевидно, как кажется.
Я столкнулся с той же ошибкой, но я не использовал модель-первый. Оказалось, что каким-то образом мой файл EDMX содержал ссылку на таблицу, хотя она не отображалась в конструкторе. Интересно, что когда я сделал текстовый поиск имени таблицы в Visual Studio (2013) таблица не была найдена.
чтобы решить эту проблему, я использовал внешний редактор, чтобы найти ссылку на таблицу-нарушитель в файле EDMX, а затем (осторожно) удалил все ссылки на таблицу. Мне жаль сказать, что я не знаю, как файл edmx попал в это состояние в первую очередь.
у меня было изменение таблицы, и он создал еще один объект с номером 1 в конце (например,
MyEntity1
иMyEntity
), что подтверждается браузером модели edmx. Что-то в этих двух сущностях вместе смутило обработку.удаление таблицы и ее исправил.
обратите внимание, что если TFS подключен, то выполните регистрацию edmx после удаления. Тогда и только тогда получить последнюю и повторно добавить его в определенном двухэтапном процессе. В противном случае TFS путается с удалением и повторным добавлением одноименного объекта(объектов), что, по-видимому, вызывает проблемы.
более быстрый способ для меня было удалить таблицы и повторно добавить их. Он автоматически сопоставил их. :)
для тех, кто использует
Database First
подход все, что вам нужно сделать после вставки нового объекта являетсяGenerate Database From Model
снова щелкните правой кнопкой мыши на и выберитеGenerate Database From Model...
была эта ошибка, когда я удалил таблицу из базы данных. Решите его, щелкнув правой кнопкой мыши на диаграмме EDMX, перейдя в свойства, выбрав таблицу из списка в окне свойств и удалив ее (используя клавишу delete) из диаграммы.
- перейдите в Обозреватель решений, нажмите кнопку поиска
- оставьте проверенными оба
Search within file content
иSearch External Files
- введите имя сущности, которое не распознается вашим отображением.
- удалить все файлы, связанные с проблемой. они, вероятно, будут названы в честь того же отсутствующего объекта. Не удаляйте файлы с именем класса контекста в файле, особенно если они имеют расширения .CS или .ТТ. В контексте .цезий файл.
удалить все строки кодов, ссылающихся на отсутствующий объект. Они будут выглядеть так:
public virtual DbSet< Entity1> Entity1 { get; set; }
эта ошибка является общей для таблиц, удаленных из базы данных.
когда вы отбрасываете таблицу в базе данных, или просто меняете
web.config.connectionStrings
для EF сопоставленной базы данных, чтобы указать на новый, а не тот, который используется для создания исходных сопоставлений является проблемой.именно эта новая БД эти сущности с ошибкой 3027 нет.
У меня была ошибка, когда я пытался сделать пользовательский результат для хранимой процедуры и предположил, что это должен быть объект.
решение состояло в том, что я просто сделал сложный тип в браузере модели и назначил его в результате "импорта функции редактирования".
Я добавлю его здесь, так как, похоже, этот вопрос где Google берет вас, когда вы получаете эту ошибку.
Я установил все правильно (мощности и зависимые свойства), но не мог понять, почему я продолжаю получать ошибку. Наконец, выяснилось, что EF сгенерировал столбец в зависимой таблице самостоятельно (table_tablecolumn) и он не имеет никакого отношения к таблице, поэтому сопоставление не было указано. Мне пришлось удалить столбец в файле edmx и перестроить решение, которое исправило проблему. Я использую подход БД.