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

有人有什么想法吗?

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

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


当前回答

我昨天遇到了这个问题,并在调试中查看了我的代码和SQL分析器的输出。

在我阅读和理解这篇文章之前,我不能理解的是,为什么EntityFramework在调用DB时抛出这个错误。我在SQL Profiler中查看了数百行,试图找出数据库模型的错误。我找不到我期待的那种电话,老实说,我也不确定我在找什么。

如果您处于此位置,请检查连接字符串。我的猜测是,在EntityFramework创建它的SQL之前,它会检查模型,在连接字符串的元数据部分指定。对我来说,这是错误的。EntityFramework甚至还没有到DB。

确保名字是正确的。一旦我得到了整理,我然后看到调用SQL Profiler的ApplicationName是'EntityFramework'与SQL调用预期的表。

其他回答

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

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

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

只需输入path,而不是{path . to . path。}: res: / / / {Path.To.The。}YourEdmxFileName.csdl | res: / / / {Path.To.The。}YourEdmxFileName.ssdl | res: / / * / {Path.To.The。}YourEdmxFileName.msl

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

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

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

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

我也遇到了和Rick一样的问题和解决方案,只是我要将一个现有的.edmx导入到一个新项目中,虽然基本名称空间无关紧要,但它被导入到不同的子目录中,因此我还必须更新Web内部的连接字符串。配置在三个地方,包括不同的子目录命名:

我也犯过类似的错误。我重新创建了项目(说来话长),并从旧项目中提取了所有内容。我没有意识到我的模型之前在一个名为“模型”的目录中,而现在在一个名为“模型”的目录中。一旦我改变了我的网络连接。配置如下:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl 

:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl

一切正常(模型改为模型)。注意,我必须改变字符串中的这三个位置。