Невозможно загрузить указанный источник метаданных при использовании EntityDataSource - Entity Framework

Мой My Model.edmx находится в сборке DataAccess.dll. Ссылка на эту сборку в моем веб-проекте (C#)

Моя строка подключения объекта является проблемой.

Вот что я скопировал из app.config в мой win.config:

<add name="MyModelEntities" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xxx;initial catalog=xxx;persist security info=True;user id=xxx;password=xxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

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

Я уверен, что название моей модели правильное. Я проверил DLL с отражателем.

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

<add name="MyModelEntities" connectionString="metadata=res://DataAccess.dll/MyModel.csdl|res://DataAccess.dll/MyModel.ssdl|res://DataAccess.dll/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xxx;initial catalog=xxx;persist security info=True;user id=xxx;password=xxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

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

Есть ли способ ссылаться на мою модель внутри dll напрямую. И моя dll не называется строго dll.

Любая помощь приветствуется.

Спасибо

2 ответа

Это может не помочь, но должно прояснить некоторые аспекты работы ресурсов метаданных со ссылочными сборками.

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

Убедитесь, что для обработки артефактов метаданных (как упомянуто bluesky) задано значение "Внедрить в выходную сборку", так как это запечет файлы csdl / ssdl / msl в dll для этой сборки и будет скопировано в каталог bin проекта ссылки. Восстановите решение.

  • res: // - говорит Entity искать во встроенных ресурсах проекта, а не путь к файлу на диске
  • ...//*/... - использует WildCard для имени сборки
  • .../Namespace.Of.MyModel.csdl - Полное имя ресурса, без имени сборки.

Пример: если мой DbContext находится в проекте / сборке под названием "Данные" с полностью определенным именем "Data.Staging.Context", мои метаданные будут выглядеть примерно так

metadata=res://*/Staging.Context.csdl|res://*/Staging.Context.ssdl|...

Или, в соответствии с JimMat:

metadata=res://Data/Staging.Context.csdl|res://Data/Staging.Context.ssdl|...

У меня был такой же опыт, как у bobetko, воссоздание проектов и баз данных с Entity Framework 5 и некоторое время заставляло его работать. (VS 2013 Express и SQL Server 2008 R2)

Затем я сделал это, и это решило все мои проблемы...

Копировать файлы модели и отображения в выходной каталог

  1. Дважды щелкните файл EDMX в обозревателе решений.
  2. Файл откроется в Entity Designer.
  3. Щелкните правой кнопкой мыши пустой участок области дизайна и выберите Свойства.
  4. Откроется окно свойств Visual Studio.
  5. Задайте для свойства обработки артефактов метаданных значение "Копировать в выходной каталог".

http://msdn.microsoft.com/en-us/library/vstudio/cc716709(v=vs.100).aspx

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

Другие вопросы по тегам