突然,在实例化生成的ObjectContext类时,我一直得到一个MetadataException。App.Config中的连接字符串看起来是正确的-自从上次它工作以来没有改变-我已经尝试从底层数据库中重新生成一个没有变化的新模型(edmx-file)。

有人有什么想法吗?

进一步的细节:我没有更改任何属性,没有更改任何输出程序集的名称,也没有尝试将EDMX嵌入到程序集中。我只是下班后等了10个小时才回来。然后它就不管用了。

我试过重新创造EDMX。我试着重新创建这个项目。我甚至尝试从头开始重新创建数据库。不管怎样,运气不好。


当前回答

对于我的案例,它是通过改变edmx文件的属性来解决的。

打开edmx文件 右键单击EDMX设计器的任意位置 选择属性 将名为“元数据工件处理”的属性更新为“嵌入输出程序集”

这为我解决了问题。 问题是,当容器试图找到元数据时,它找不到它。所以只要在同一个装配中就可以了。 如果您的edmx文件在另一个程序集中,则此解决方案将不起作用

其他回答

对于所有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 

玩得开心。

当我得到元数据问题排序,我有一个后续的问题,形式是调用异常无法找到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文件夹中。

我在反思一个旧程序时,遇到了同样的问题。我浏览了之前的答案,我成功地解决了这个问题,我把“Model.”的3个文件。csdl”、“模型。ssdl”和“模型。在bin目录中,也在实体类的旁边。 之后修改web中实体连接字符串的元数据部分。配置为:

metadata=~/bin/Model.csdl|~/bin/Model.ssdl|~/bin/Model.msl

程序运行成功,显示此异常。

在将一个大的解决方案从源代码管理资源管理器的一个文件夹移动到另一个文件夹后,我得到了这个问题。我们没有把包文件夹检查到Team Foundation,所以我认为VS会自动下载包。这将我的EF表单v6.1.2升级到v6.1.3。

当我降级到最初的v6.1.2时,这个问题就消失了。

异常是因为编译器指向不存在的元数据,所以只是复制app.config连接字符串到Web。配置ConnectionString