Entity Framework - невозможно загрузить указанный ресурс метаданных
Я понимаю, что это было задано несколько раз, но я просто не могу понять суть проблемы. Я получаю следующий стек ошибок:
Когда я размышляю над своей dll, я вижу следующее
Чтение http://blogs.teamb.com/craigstuntz/2010/08/13/38628/ предполагает, что я ожидаю увидеть здесь файлы csdl, msl и ssdl, но это не так. Однако они существуют здесь obj\Debug\edmxResourcesToEmbed.
Тем не менее я попытался явным образом сказать web.config, где искать, делая это:
...connectionString="metadata=res://DllName.dll/PaymentModel.csdl|res://DllName.dll/PaymentModel.ssdl|res://DllName.dll/PaymentModel.msl;provider=System.Data.SqlClient;provider ... />
Который просто порождает ошибку, говоря, что не может найти dll:
Не удалось разрешить сборку 'DllName.dll'.
Очень похоже на этот нерешенный вопрос SO Невозможно разрешить сборку Model.dll
Последнее, что я пробовал, это изменить линию метаданных на:
...connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider ... />
Это бросило сообщение о sql ce, которое я не использую - есть ли способ обойти это?
Есть ли что-нибудь еще, что я могу попробовать? Или может кто-нибудь увидеть, где я ошибаюсь? Некоторые дополнительные детали:
Наконец, при этом - если я установил EDMX из Embedded Resource в EntityDeploy, то это будет работать локально, но не будет строиться на сервере сборки, поскольку он выдает ту же ошибку, что и этот вопрос SO:
Не удалось найти узел Conceptual Schema для встраивания в качестве ресурса для входного файла
Но исправление, похоже, не помогает, и я не могу установить.NET 4.5 на сервер, к сожалению.
Ответы
Ответ 1
Так что я дошел до конца, отчасти я думаю, что это была моя ошибка. Я поставлю решения по каждой проблеме, с которой я столкнулся ниже, если это поможет кому-то еще.
Не удалось загрузить указанную проблему с ресурсами метаданных
Это было вызвано установкой параметра "Обработка метаданных метаданных" в модели edmx от "EntityDeploy" до "Embedded Resouce".
Таким образом, это означало, что он просто вложил весь файл файла edmx в dll и вместо этого не генерировал файлы ssdl, msl и csdl.
Я думаю, вы должны установить это для EntityDeploy, чтобы это работало и сгенерировало эти файлы правильно. Здесь совершенный смысл и наше плохое.
Не удалось разрешить сборку 'DllName.dll'
Это было решено Эндрю в комментариях выше, спасибо за указатель на это.
Не удалось найти узел Conceptual Schema для встраивания в качестве ресурса для входного файла
Ключом к этой проблеме на самом деле является то, что наш сервер сборки в настоящее время находится в Windows 2003, поэтому не может быть установлен.NET 4.5, локально мы использовали EF 6.1, работающий под.NET 4.0 на VS2013.
Однако по какой-то причине похоже, что нам нужно установить.NET 4.5 на нашем сервере сборки, чтобы это можно было создать, даже если мы не используем ни одну из функций 4.5 и не нацеливаем.NET Framework.
Переход к EF до 4.3 позволил решить эту проблему для нас в краткосрочной перспективе. Не идеально, но это сработало.
Ответ 2
У меня была такая же проблема. После перемещения файла.edmx с EF-моделью, чтобы разделить указанную ошибку сборки, возникла моя головная боль: "Не удалось загрузить указанный ресурс метаданных".
Версия EF 6.1
Решение:
Старое значение:
metadata=res://*/Data.DataModel.csdl
Новое значение:
metadata=res://*/DataModel.csdl
Первоначально.edmx находился в папке проекта, и я переместил его в корень проекта.
Ответ 3
вы должны указать полное имя сборки и путь к вашему файлу модели внутри него (разделенный /
), а не имя dll
connectionString="metadata=res://Name.Of.The.Assembly, Culture=neutral, PublicKeyToken=8e2e51fcf4cf363e/Payment.PaymentModel.csdl|.........."
то же самое для ssdl
и msl
Ответ 4
Изменение метаданных
connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;
к
connectionString="metadata=res://*/;
Вышеизложенное изменение решит проблему
Ответ 5
Решение:
1) Откройте файл.edmx из visual studio.
2) Щелкните в любом месте.
3) Открыть окно свойств edmx.
4) Измените пространство имен на правильное имя папки.
5) 1: https://i.stack.imgur.com/6sZvo.png (выберите изображение для получения более подробной информации).
Ответ 6
Я действительно получил эту идентичную ошибку, потому что моя строка подключения Entity Framework
указывала на действительную базу данных, однако это была некорректная база данных.
Если в SQL Server имеются следующие экземпляры:
Убедитесь, что строка подключения указывает на ту же базу данных, с которой .EDMX
подключен и сгенерирован. Кажется очевидным, но при копировании настроек EF
соединения из одного проекта в другой эта ошибка была выполнена, и итоговым результатом было Unable to load the specified metadata resource
сообщение Unable to load the specified metadata resource
. Как только я использовал правильную строку подключения, указывающую на правильную базу данных и сборку - ошибка была решена.
Проще всего сделать, это взять исходную строку соединения, созданную в файле .config
.EDMX
рядом с .EDMX
и скопировать туда, где это необходимо, чтобы убедиться, что тонкие или незначительные пропуски/ошибки не были .EDMX
что EF
неправильно загружается/подключается.
Ответ 7
Я получал ту же ошибку. Моя строка подключения была следующей:
<add name="EmployeeDbContext" connectionString="metadata=res://*/EmployeeModel.csdl|res://*/EmployeeModel.ssdl|res://*/EmployeeModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=Sample;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Я изменил его на следующий и устранил проблему
<add name="EmployeeDbContext" connectionString="server=.; database=Sample; integrated security=true;"
providerName="System.Data.SqlClient"/>
Ответ 8
Кроме того, имейте в виду, что при перемещении edmx файла из веб-приложения на уровень данных (web.config-connection/app.config-connection) вы изменяете строку соединения в слое данных и уровне webservice. (иначе используется две разные строки соединения, и это вызывает такую проблему)
Ответ 9
У меня была такая же проблема
System.Data.MetadataException: невозможно загрузить указанный ресурс метаданных
Оказалось, что строка Connection, которая была сгенерирована ранее, имела на ней все имя edmx. Я вынул все имена моделей из строки подключения, оставив только нижнюю строку в моих метаданных
"metadata=res://*/;provider=System.Data.SqlClient;provider
Это сработало для меня.
Ответ 10
Я попал в эту проблему, и мне было много, много, много раз, и я всегда забываю, как я это исправить.
Все, что мне нужно было сделать, это установить default.aspx в качестве начальной страницы.
Очевидно, это не поможет всем, но в моем случае я пошел по пути проверки моей конфигурации, строки подключения...
Надеюсь, что это поможет кому-то, или, по крайней мере, в следующий раз, когда я это сделаю, я найду свое исправление. :)
Ответ 11
Я использовал EF6 в своей визуальной студии 2013 года. Я решил это, выполнив следующие шаги.
- Щелкните правой кнопкой мыши по модели Entity
- Открыть с помощью редактора XML (текста)
- в теге set
ProviderManifestToken="2008"
- построить решение
Надеюсь, это сработает для вас.
Ответ 12
Если вы используете dotnet
CLI
Для новых посетителей, использующих новую dotnet build
для создания проектов на основе Entity Framework 6.x, знайте, что в настоящее время он НЕ встраивает какие-либо метаданные в окончательную сборку. Поэтому, если вы запустите из VS, он будет запущен, но если ваши сценарии CI используют dotnet
то они потерпят неудачу на сервере, пока вы не вернетесь к msbuild
. ИМХО, это ошибка, и инструменты должны справиться с этим. При необходимости вы можете прослушивать поток GitHub.
Ответ 13
Я ударил это несколько раз при перемещении между машинами разработки после вытаскивания кода из исходного управления. Обычно мне просто нужно явно перестроить проект с помощью файла EDMX.
Ответ 14
Строка соединения "metadata = res" должна быть такой же, как имя Edmx. например
metadata=res://*/EmployeeModel.csdl
это имя EDMX должно быть EmployeeModel
Ответ 15
Я хочу поделиться своим опытом и тем, как я это решил. В моем случае это происходит из-за того, что я копирую и вставляю строку подключения на рабочий сервер. В моем приложении использовалась инфраструктура Entity.
Проблема была в метаданных
Я назвал модель своего объекта "BetModel", но в моей строке подключения я использовал "Entity" - "res:///Entity.csdl | res:///Entity.ssdl | res://*/Entity.msl" по "метаданным" (причина в том, что я скопировал его).
Итак, моя неправильная ConnectionString была:
connectionString="metadata=res://*/Entity.csdl|res://*/Entity.ssdl|res://*/Entity.msl;provider=System.Data.SqlClient;provider connection string="data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework""
и исправленная ConnectionString была:
<add name="BetEntities" connectionString="metadata=res://*/BetModel.csdl|res://*/BetModel.ssdl|res://*/BetModel.msl;provider=System.Data.SqlClient;provider connection string="data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Ответ 16
Я делюсь своим кодом с другим разработчиком, и у него возникла эта проблема. Нет различий в строках подключения. Все файлы в порядке... Я исправил его, установив
- Обработка артефактов метаданных: "Вставить в сборку вывода" в "Копировать в каталог вывода",
- восстановление проекта,
- и затем снова установите его.
Я полагаю, что это сработало, потому что отдельные файлы (CSDL/MSL/SSDL файлы) были созданы в выходном каталоге, когда он использовал "copy to output directory". По-видимому, была ошибка, которая требовала от них встроенной версии. Надеюсь это поможет :)