突然,在实例化生成的ObjectContext类时,我一直得到一个MetadataException。App.Config中的连接字符串看起来是正确的-自从上次它工作以来没有改变-我已经尝试从底层数据库中重新生成一个没有变化的新模型(edmx-file)。
有人有什么想法吗?
进一步的细节:我没有更改任何属性,没有更改任何输出程序集的名称,也没有尝试将EDMX嵌入到程序集中。我只是下班后等了10个小时才回来。然后它就不管用了。
我试过重新创造EDMX。我试着重新创建这个项目。我甚至尝试从头开始重新创建数据库。不管怎样,运气不好。
和一个快速的方法来检查模型名称没有Reflector....查找目录
...obj - {} - edmxResourcesToEmbed输出配置
检查.csdl、.msl和.ssdl资源文件是否存在。如果它们在子目录中,则子目录的名称必须加在模型名称之前。
例如,我的三个资源文件在一个子目录Data中,所以我的连接字符串必须是
元= res: / / * Data.MyModel.csdl | res: / * / Data.MyModel.ssdl | res: / * / Data.MyModel.msl;
(与元= res: / / * / MyModel csdl | res: / / * / MyModel ssdl | res: / / * / MyModel msl;)。
对我来说,我把数据访问层和用户界面层分开了。
每一层都有实体连接字符串。
在我将这两个分离的连接字符串修改为相同之前,我仍然发现下面的错误。
Unable to load the specified metadata resource
所以我让这两个层(DAL, UI)是相同的连接字符串,它的工作完美。
我的解决方案是使所有的连接字符串是相同的,无论他们已经提出。
对于所有SelftrackingEntities用户,
如果您已经遵循Microsoft演练并将Object上下文类分离为
WCF服务项目(通过链接到上下文.tt)所以这个答案是给你的:
这篇文章中显示的部分答案包括如下代码:
... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
typeof(YourObjectContextType).Assembly.FullName);
对你没用!!原因是youobjectcontexttype。程序集现在驻留在不同的程序集(在wcf项目程序集内),
你应该用——>替换youobjectcontexttype。assembly。fullname
ClassTypeThatResidesInEdmProject.Assembly.FullName
玩得开心。
我的问题和解决方案,症状是相同的“无法加载指定的元数据资源”,但根本原因不同。我在解决方案中有两个项目,一个是EntityModel,另一个是解决方案。实际上,我在EntityModel中删除并重新创建了EDMX文件。
解决方案是,我必须回到Web应用程序项目,并将这一行添加到配置文件中。新模型改变了一些必须在“其他”项目的Web中复制的项。配置文件。旧的结构不再适用了。
<add name="MyEntities"
connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=Q\DEV15;initial catalog=whatever;
user id=myuserid;password=mypassword;
multipleactiveresultsets=True;
application name=EntityFramework""
providerName="System.Data.EntityClient" />