Я использую Entity Framework 4 с подходом Model First.
Я начал проект, спроектировал сущности и создал базу данных. Все нормально работало.
Затем мне нужно было вернуться и добавить еще одну сущность в мою модель. Однако когда я перетаскиваю объект в EDMX, я получаю эту ошибку:
Хорошо! Мне просто нужно сопоставить Entity1 с таблицей .. Но привет! Я использую подход Model First, я ожидаю, что он создаст для меня таблицу при создании DDL.
Как мне обойти эту ошибку?
.net
entity-framework
entity-framework-4
Андре Пена
источник
источник
Ответы:
Это связано с тем, как EF4 работает с моделью сначала.
Когда вы впервые создаете модель «сначала модель», она находится в состоянии, когда SSDL не существует. Вы можете перетаскивать сущности, связывать их и так далее, и все же, если вы посмотрите на SSDL в файле EDMX, вы увидите, что ни один из объектов не имеет связанной таблицы хранения в SSDL.
Это меняется, когда вы щелкаете
Generate Database From Model
элемент контекстного меню. Запутывает то, что это действие делает больше, чем просто генерирует сценарий DDL. Фактически, он изменяет файл EDMX для включения информации SSDL. С этого момента файл EDMX перейдет в состояние, в котором каждая сущность в конструкторе / CSDL должна отображаться на сущность в SSDL. Если не сопоставить, это вызовет ошибку времени компиляции:Еще один интересный факт: это не та ошибка, которая помешает компиляции. Он действительно сгенерирует библиотеку выходных классов. Разве это не должно быть предупреждение или что-то в этом роде?
Чтобы предотвратить эту ошибку, все, что вам нужно сделать после вставки нового объекта, - это
Generate Database From Model
снова. Это обновит SSDL и исправит сопоставления.РЕДАКТИРОВАТЬ
Если вы не используете модель сначала и вы «обновляете из базы данных», у вас также будет эта ошибка в случае удаления таблицы на сервере БД. Это связано с тем, что Entity Framework не удаляет объект автоматически. Удалите объект вручную, и ошибка исчезнет.
источник
Я обнаружил, что получаю ту же ошибку, потому что я забыл создать реляционное ограничение после создания связи между двумя объектами.
источник
Если вы разрабатываете модель с помощью Entities Framework, вы можете иногда сталкиваться с этой досадной ошибкой:
Это может не иметь смысла, если на EDM все выглядит нормально, но это потому, что эта ошибка обычно не имеет ничего общего с EDM. Он должен сказать: «Восстановите файлы базы данных».
Видите ли, Entities проверяет SSDL и MSL во время сборки, поэтому, если вы только что изменили свой EDM, но не используете Generate Database Model ... тогда он жалуется, что в ваших sql-скриптах чего-то не хватает.
Короче говоря, решение таково: «Не забывайте создавать модель базы данных каждый раз после обновления EDM, если вы занимаетесь первой разработкой модели. Надеюсь, ваша проблема решена».
источник
В моем случае другой разработчик удалил некоторые таблицы из базовой базы данных. Когда я понял это и удалил эти таблицы из объекта, проблема была решена. Это было не так очевидно, как кажется.
источник
Я столкнулся с той же ошибкой, но я не использовал модель сначала. Оказалось, что каким-то образом мой файл EDMX содержал ссылку на таблицу, хотя она не отображалась в дизайнере. Интересно, что когда я провел текстовый поиск имени таблицы в Visual Studio (2013), таблица не была найдена.
Чтобы решить эту проблему, я использовал внешний редактор (Notepad ++), чтобы найти ссылку на проблемную таблицу в файле EDMX, а затем (осторожно) удалил все ссылки на таблицу. К сожалению, я не знаю, как файл EDMX вообще попал в такое состояние.
источник
У меня было изменение таблицы, и он создал еще один объект с номером 1 в конце (например,
MyEntity1
иMyEntity
), что подтверждено браузером модели edmx. Что-то в двух сущностях вместе запутало обработку.Удаление таблицы и повторное добавление ее исправили.
Обратите внимание, что если TFS подключена, выполните проверку edmx после удаления. Тогда и только тогда получите последнюю версию и повторно добавьте ее в определенном двухэтапном процессе. В противном случае TFS путается с удалением и повторным добавлением одного и того же названного объекта (ов), что, кажется, вызывает проблемы.
источник
Для меня более быстрым способом было удалить таблицы и снова добавить их. Он автоматически сопоставил их. :)
источник
Для тех, кто использует
Database First
подход, все, что вам нужно сделать после вставки нового объекта, - этоGenerate Database From Model
снова щелкнуть правой кнопкой мыши по вашему.edmx
файлу и выбратьGenerate Database From Model...
источник
Была эта ошибка, когда я удалил таблицу из базы данных. Решил это, щелкнув правой кнопкой мыши на диаграмме EDMX, перейдя в Свойства, выбрав таблицу из списка в окне свойств и удалив ее (с помощью клавиши удаления) из диаграммы.
источник
Search within file content
иSearch External Files
удалите все строки кодов, относящиеся к отсутствующему объекту. Они будут выглядеть так:
Эта ошибка характерна для таблиц, удаленных из базы данных.
Когда вы удаляете таблицу в базе данных или просто меняете ее
web.config.connectionStrings
для базы данных EF Mapped, проблема заключается в том, чтобы указать на новую, а не на ту, которая использовалась для создания исходных сопоставлений.Это новая база данных, этих сущностей с ошибкой 3027 нет.
источник
У меня была ошибка, когда я пытался создать собственный результат для хранимой процедуры и предполагал, что это должен быть объект.
Решение заключалось в том, что я просто создал сложный тип в обозревателе модели и назначил его в результате «Редактировать импорт функций».
Я добавлю его сюда, поскольку похоже, что этот вопрос заключается в том, куда Google приведет вас, когда вы получите эту ошибку.
источник
Я установил все правильно (мощности и зависимые свойства), но не мог понять, почему продолжаю получать ошибку. Наконец выяснилось, что EF самостоятельно сгенерировал столбец в зависимой таблице (table_tablecolumn), и он не имеет никакого отношения к таблице, поэтому сопоставление не было указано. Мне пришлось удалить столбец в файле EDMX и восстановить решение, которое устранило проблему. Я использую подход БД.
источник
Обновить модель из базы данных у меня не работает.
Мне пришлось удалить конфликтующий объект, затем выполнить «Обновить модель из базы данных» и, наконец, перестроить решение. После этого все работает нормально.
источник
Делитесь этим с другими людьми. В моем случае мы работали над общим решением MVC и использовали общий модуль для таблиц, которые мы используем для раскрывающихся списков. Я получил ошибку, когда обновил модель Entity, добавив новую таблицу. Оказывается, когда я обновил EDMX, он, вероятно, обновил мои права доступа к базе данных, что привело к тому, что я не имел доступа к этой определенной таблице
no mapping specified
.Просто повторное добавление и предоставление доступа моему пользователю решило проблему.
источник
Думаю, я получил это из-за того, что не удалил явно некоторые таблицы из edmx перед их переименованием и повторным добавлением. Вместо этого я просто переименовал таблицы, а затем выполнил «Обновить модель из базы данных», думая, что они исчезнут, и удалим их из модели. Затем я сделал еще одну модель обновления из базы данных и добавил переименованные таблицы.
Сайт работал с новыми таблицами, но у меня была ошибка. В конце концов, я заметил, что исходные таблицы все еще присутствуют в модели. Я удалил их из модели (щелкните их на экране edmx, удалите ключ), а затем ошибка исчезла.
источник