我在实体框架中遇到了一些严重的问题,我似乎无法弄清楚最新情况。
我尝试了很多选项: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 app)
最初它只是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而不是客户端配置文件verison。
非常感谢任何有关此事的帮助。
答案 0 :(得分:21)
在名为Simple Model.edmx
的程序集中,具有名为Mvc.Data.dll
的实体框架模型的应用程序的元数据参数可能如下所示:
<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://" part.
包含资源"Simple Mvc.Data.dll"
的程序集的名称。如果您的程序集名称很强,那么您可以在这里详细说明一个强名称。
资源名称"Model.csdl"
。不要将其与EDMX或型号名称混淆。在这种情况下,它们恰好相同,但扩展名除外,但并非总是如此!
如果你的资源碰巧没有相同的话,它可能会失败 将name命名为模型,或者是否恰好没有加载程序集。
有关详细信息,请查看Troubleshooting Entity Framework Connection Strings
我希望这会对你有所帮助。
答案 1 :(得分:1)
就我而言,connectionString正在尝试查找资源文件,但无法查找。我为解决问题所做的是:
右键单击EDMX图 - &gt;转到属性 - &gt;连接 - &gt;元数据工件处理 - &gt;然后更改为复制到输出目录并重建。
这会将您的元数据连接字符串路径点更改为他尝试查找的资源。
答案 2 :(得分:1)
在Visual Studio中重建解决方案帮助了我。
它在Build - &gt;重建
答案 3 :(得分:0)
MetadataException:无法加载指定的元数据资源
这意味着应用程序无法加载EDMX。
有几件事可能导致这种情况,但很可能是由于无效的连接字符串。
可能的解决方案:
1.检查连接字符串 2.Refresh model.edmx 3.在model.edmx中选择“从数据库更新模型”选项
答案 4 :(得分:0)
在我的情况下,我在项目中删除了我的EDMX文件并使用新名称再次创建它,例如。在它是Home_Model之前,之后它是Home_Cost。 当我尝试调用以下代码时,它“无法加载指定的元数据资源”。错误。 /////
using (var currentEntities = new masterEntities())
{
currentUser = currentEntities.Home_User.FirstOrDefault(
x => x.UserLoginAccount == userLoginAccount && x.UserPwd == userPwd);
}
//// 所以在Web.config中,我修改了 从Home_Model到Home_Cost的元数据配置。
然后它的工作原理。 显然,VS2015(我的版本)在删除/创建edmx时没有更新web.config。