Невозможно загрузить указанный источник метаданных при использовании 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="data source=xxx;initial catalog=xxx;persist security info=True;user id=xxx;password=xxx;multipleactiveresultsets=True;App=EntityFramework"" 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="data source=xxx;initial catalog=xxx;persist security info=True;user id=xxx;password=xxx;multipleactiveresultsets=True;App=EntityFramework"" 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)
Затем я сделал это, и это решило все мои проблемы...
Копировать файлы модели и отображения в выходной каталог
- Дважды щелкните файл EDMX в обозревателе решений.
- Файл откроется в Entity Designer.
- Щелкните правой кнопкой мыши пустой участок области дизайна и выберите Свойства.
- Откроется окно свойств Visual Studio.
- Задайте для свойства обработки артефактов метаданных значение "Копировать в выходной каталог".
http://msdn.microsoft.com/en-us/library/vstudio/cc716709(v=vs.100).aspx
Я думаю, что VS путается с несколькими проектами в решении с несколькими подключениями к одной и той же базе данных. Вышеупомянутое исправление решило это для меня и восстановило мои сломанные проекты.