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

有人有什么想法吗?

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

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


当前回答

当我的emdx文件被一个预构建命令删除时,我得到了这个错误,很简单。我花了一段时间才意识到事情这么简单。

其他回答

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

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

这意味着应用程序无法加载EDMX。有几种情况会导致这种情况。

您可能已经将模型的MetadataArtifactProcessing属性更改为Copy to Output Directory。 连接字符串可能错误。我知道您说您没有更改它,但如果您更改了其他内容(例如,程序集的名称),它仍然可能是错误的。 您可能正在使用编译后任务将EDMX嵌入到程序集中,但由于某种原因该程序集中不再工作。

简而言之,你的问题中没有足够的细节来给出准确的答案,但希望这些想法能让你走上正确的轨道。

更新:我已经写了一篇博客文章,介绍了更完整的故障排除步骤。

我花了一整天在这个错误上

如果您正在使用n-tear架构

或者您尝试将EDMX生成的模型从DataAccessLayer分离到DomainModelLayer

也许你会得到这个错误

第一个故障排除步骤是确保webconfig (UILayer)和appconfig (DataAccessLayer)中的Connection字符串是相同的 第二个是非常重要的连接字符串 connectionString = "元数据= res: / / * / Model.csdl | res: / / * / Model.ssdl | res: / / * / Model.msl;提供… 这就是问题所在

从哪里我得到了Modelor。csdl在我的连接字符串中,他们在哪里

这是我们的解决方案,请看图

希望对你有所帮助

如果您正在使用来自不同项目的edmx,那么在连接字符串中,更改…

metadata=res://*/Data.DataModel.csdl

……

metadata=res://*/DataModel.csdl

这发生在我身上,当我不小心切换了edmx文件的构建动作(出现在IDE属性下)从“EntityDeploy”到“None”。EntityDeploy为您填充元数据:请参阅http://msdn.microsoft.com/en-us/library/cc982037.aspx