MetadataException: невозможно загрузить указанный ресурс метаданных - PullRequest
647 голосов
/ 27 марта 2009

Внезапно я продолжаю получать MetadataException за создание экземпляра моего сгенерированного ObjectContext класса. Строка подключения в App.Config выглядит правильно - не изменилась с тех пор, как работала в последний раз - и я попытался восстановить новую модель (edmx-файл) из базовой базы данных без изменений.

У кого-нибудь есть идеи?

Дополнительные сведения: я не изменил никаких свойств, я не изменил имя любых выходных сборок, я не пытался встроить EDMX в сборку. Я просто ждал 10 часов с момента ухода с работы, пока не вернулся. И тогда это больше не работало.

Я пытался воссоздать EDMX. Я пытался воссоздать проект. Я даже пытался воссоздать базу данных с нуля. Не повезло вообще.

Ответы [ 43 ]

0 голосов
/ 07 марта 2017

В моем случае это было потому, что я строил строку подключения с использованием EntityConnectionStringBuilder. Убедитесь, что ваше свойство метаданных использует имя модели (включая пространство имен)

0 голосов
/ 05 октября 2017

Эта проблема возникла после перемещения большого решения из одной папки в Source Control Explorer в другую. Мы не проверяем папку с пакетами в Team Foundation, и я думаю, что VS загружал пакеты автоматически. Это обновило мою форму EF v6.1.2 до v6.1.3.

Проблема исчезла, когда я перешел на оригинальную версию 6.1.2.

0 голосов
/ 24 мая 2018

В моем случае ни один из перечисленных ответов не сработал, и поэтому я публикую это.

В моем случае работа на Visual Studio и запуск с IIS Express работали нормально. Но когда я развертывал с использованием сценариев Nant в качестве автономного веб-сайта, возникали ошибки. Я перепробовал все приведенные выше предложения, а затем понял, что DLL, сгенерированная скриптом nant, была намного меньше, чем сгенерированная VS. И тогда я понял, что Нант не смог найти файлы .csdl, .msl и .ssdl. Таким образом, существует два способа решения этой проблемы: один - скопировать необходимые файлы после того, как Visual Studio их сгенерирует, и включить их в развертывание сборки. А затем в Web.config укажите путь как:

"metadata=~/bin/MyDbContext.csdl|~/bin/MyDbContext.ssdl|~/bin/MyDbContext.msl;provider=System.Data.SqlClient;...."

Предполагается, что вы вручную скопировали файлы в каталог bin сайта, на котором вы работаете. Если он находится в другом каталоге, измените путь соответствующим образом. Второй метод - выполнить EdmGen.exe в сценарии Nant, сгенерировать файлы и затем включить их в качестве ресурсов, как это сделано в примере ниже: https://github.com/qwer/budget/blob/master/nant.build

0 голосов
/ 29 сентября 2010

Другая причина этого исключения - когда вы включаете связанную таблицу в ObjectQuery, но вводите неправильное имя свойства навигации.

Пример:

var query = (from x in myDbObjectContext.Table1.Include("FKTableSpelledWrong") select x);
0 голосов
/ 12 февраля 2016

Просто введите путь следующим образом вместо {Path.To.The.}: Res: // / {Path.To.The.} YourEdmxFileName.csdl | res: // / {Path. to.The} YourEdmxFileName.ssdl | Рез:.. // * / {} Path.To.The YourEdmxFileName.msl

0 голосов
/ 09 февраля 2016

Я получил эту ошибку, когда мой файл emdx был удален командой prebuild, довольно просто. Мне потребовалось некоторое время, прежде чем я понял, что это так просто.

0 голосов
/ 10 августа 2011

Иногда сборка, содержащая модель, не загружается:

    [TestMethod]
    public void TestOpenWithConfigurationAfterExplicit()
    {
        String dummy = typeof(MallApp).Assembly.FullName;  
        //force the assembly loaded.
        using (DbContext ctx = new DbContext("name=MyContainer))
        {
        }
    }

Тип MallApp находится в той же сборке, что и модель объекта. Без явной загрузки будет выброшено System.Data.MetadataException.

0 голосов
/ 02 ноября 2012

Что касается меня, я разделил уровень доступа к данным и уровень интерфейса пользователя. Таким образом, у меня есть строка подключения объекта для каждого слоя.

Прежде чем изменить эти две отдельные строки подключения, чтобы они были одинаковыми, я все же обнаружил, что ошибка ниже.

Unable to load the specified metadata resource

Так что я делаю, чтобы были одинаковые строки подключения для этих двух слоев (DAL, UI), он отлично работает.

Мое решение - сделать все строки подключения одинаковыми независимо от того, где они уже представлены .

0 голосов
/ 15 сентября 2014

Использование информации из этого блога :

Как уже говорили другие, res: \\ - указатель на ваши ресурсы. Чтобы проверить и убедиться в правильности имен ваших ресурсов, вы можете использовать декомпилятор, такой как DotPeek от JetBrains , чтобы открыть файл .dll и просмотреть файлы ресурсов.

Или вы можете открыть окно наблюдения во время отладки и вставить этот код, чтобы получить массив имен ресурсов в текущей выполняемой сборке.

System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames()

При этом формат ваших путей метаданных должен выглядеть примерно так:

{my-assembly-name} / {возможно-a-namespace}. {Class-name}. {Csdl или ssdl или msl}

0 голосов
/ 13 февраля 2014

Подобная проблема для меня. Имя моего класса отличалось от имени моего файла. Сгенерированная строка соединения имела имя класса, а не имя файла. Решение для меня было просто переименовать мой файл, чтобы он соответствовал имени класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...