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


Я использую Entity Framework 4 С первым подходом модели.

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

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

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

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

13 84

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) из диаграммы.

  1. перейдите в Обозреватель решений, нажмите кнопку поиска
  2. оставьте проверенными оба Search within file content и Search External Files
  3. введите имя сущности, которое не распознается вашим отображением.
  4. удалить все файлы, связанные с проблемой. они, вероятно, будут названы в честь того же отсутствующего объекта. Не удаляйте файлы с именем класса контекста в файле, особенно если они имеют расширения .CS или .ТТ. В контексте .цезий файл.
  5. удалить все строки кодов, ссылающихся на отсутствующий объект. Они будут выглядеть так:

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

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

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

именно эта новая БД эти сущности с ошибкой 3027 нет.

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

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

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

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

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

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