我尝试了许多选项:MetadataException: Unable to load the specified metadata resource和着名的Craig Stuntz的博客文章位于:http://blogs.teamb.com/craigstuntz/2010/08/13/38628/
为简洁起见,我有3个项目:
Funscribe.Data(位于这里的EDMX文件)
Funscribe.Console(控制台应用程序)
Funscribe.Web(MVC 3应用程序)
最初只是MVC应用程序,我最近添加了这个新的控制台项目。
我从web.config中复制了连接字符串并将其应用到我的app.config中:
<add name="FundirectoryEntities" connectionString="Metadata=res://*/Fundirectory.csdl|res://*/Fundirectory.ssdl|res://*/Fundirectory.msl;provider=System.Data.sqlClient;provider connection string="data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
我的mvc应用程序继续工作,但是当我运行控制台应用程序时,我感到恐惧:
“无法加载指定的元数据资源”。
我尝试将连接字符串更改为通配符设置:
<add name="FundirectoryEntities" connectionString="Metadata=res://*/;provider=System.Data.sqlClient;provider connection string="data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
我得到:
在映射和元数据信息中找不到指定的默认EntityContainer名称“FundirectoryEntities”。
我尝试更改它以指定程序集:
<add name="FundirectoryEntities" connectionString="Metadata=res://Funscribe.Data.dll/Fundirectory.csdl|res://Funscribe.Data.dll/Fundirectory.ssdl|res://Funscribe.Data.dll/Fundirectory.msl;provider=System.Data.sqlClient;provider connection string="data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
我得到:
无法解析程序集“Funscribe.Data.dll”。
我失去了我应该在这里做什么。我刚刚将该项目升级到Visual Studio 2012(在转换为VS 2012后,我介绍了这个新的控制台应用程序)。
我也注意到,Funscribe.Data.dll位于控制台项目的bin文件夹中,我手动删除这些文件并观察它被重新创建。什么困惑我是网络应用程序继续正常工作!
所有项目都在.NET 4.0上。控制台应用程序使用.NET 4.0而不是客户端配置文件验证码。
对此事的任何帮助都非常感谢。
解决方法
<connectionStrings> <add name="MyEntities" connectionString="Metadata= res://Simple Mvc.Data.dll/Model.csdl| res://Simple Mvc.Data.dll/Model.ssdl| res://Simple Mvc.Data.dll/Model.msl;provider= <!-- ... -->
所以你可以看到,在运行时我们需要的EDMX的三个部分都有一个参考。他们都以同样的方式工作,所以让我们再仔细检查一下。 CSDL引用如下所示:
res://Simple Mvc.Data.dll/Model.csdl
它规定了三件事情:
>我们从资源加载CSDL。那就是“res://”部分。
>包含资源的程序集的名称“Simple Mvc.Data.dll”。如果你的程序集是强名字的,你可以在这里指定一个强大的名字,其所有的冗长的荣耀。
>资源本身的名称,“Model.csdl”。不要将其与EDMX或型号名称混淆。在这种情况下,它们恰好是相同的,除了扩展,但这并不总是真的!
It will probably fail if your resources don’t happen to have the same
name as your model,or if the assembly doesn’t happen to be loaded.
有关更多信息,请查看Troubleshooting Entity Framework Connection Strings
我希望这将有助于你。