突然,在实例化生成的ObjectContext类时,我一直得到一个MetadataException。App.Config中的连接字符串看起来是正确的-自从上次它工作以来没有改变-我已经尝试从底层数据库中重新生成一个没有变化的新模型(edmx-file)。
有人有什么想法吗?
进一步的细节:我没有更改任何属性,没有更改任何输出程序集的名称,也没有尝试将EDMX嵌入到程序集中。我只是下班后等了10个小时才回来。然后它就不管用了。
我试过重新创造EDMX。我试着重新创建这个项目。我甚至尝试从头开始重新创建数据库。不管怎样,运气不好。
当我得到元数据问题排序,我有一个后续的问题,形式是调用异常无法找到app.config中XXXEntities的连接字符串(其中我的目标是不依赖app.config)。幸运的是,我找到了引用系统。我的单元测试项目中的数据清除了最后的障碍。总结一下:
使用nuget将实体框架安装到单元测试项目中。
确保System. data . entity和System. data . entity。引用数据。
按照这里的描述对连接字符串进行排序。
将连接字符串传递给分部类构造函数。
现在我的元数据在一个类库中,这个类库可以从引用db更新,并且我可以在运行时将我的应用程序和单元测试指向任何服务器上的任何db。
附录:当我移动我的edmx到一个文件夹,我又得到了错误。经过一些研究,我发现您希望元数据字符串看起来像:metadata=res://EPM.DAL/Models.EPM。其中EPM. csdl。DAL是组装和EPM的名称。Edmx在models文件夹中。
对我来说,我把数据访问层和用户界面层分开了。
每一层都有实体连接字符串。
在我将这两个分离的连接字符串修改为相同之前,我仍然发现下面的错误。
Unable to load the specified metadata resource
所以我让这两个层(DAL, UI)是相同的连接字符串,它的工作完美。
我的解决方案是使所有的连接字符串是相同的,无论他们已经提出。
我的问题和解决方案,症状是相同的“无法加载指定的元数据资源”,但根本原因不同。我在解决方案中有两个项目,一个是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" />