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

有人有什么想法吗?

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

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


当前回答

导致此异常的另一个原因是在ObjectQuery中包含了相关表,但输入了错误的导航属性名。

例子:

var query = (from x in myDbObjectContext.Table1.Include("FKTableSpelledWrong") select x);

其他回答

有同样的问题,因为我重命名了一个程序集。

我还必须在项目属性/AssemblyInfo.cs中的AssemblyTitle和AssemblyProduct属性中重命名它,并删除并重新添加对edmx文件的引用。

然后它运行得很好。

我的理论是,如果您有多个同名的edmx文件(例如Model1),它将给出该异常。 当我决定将所有edmx文件(位于不同的项目中)命名为Model1时,我也遇到了同样的问题,因为我认为它们应该是独立的。

我刚花了30分钟玩这个。我重命名了实体对象,重命名了配置文件中的条目,但还有更多…您还必须更改对CSDL的引用

很容易错过-如果您正在重命名,请确保您获得所有内容....

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

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

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

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

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