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

有人有什么想法吗?

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

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


当前回答

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

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

……

metadata=res://*/DataModel.csdl

其他回答

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

例子:

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

我也有同样的问题。我用反射器查看了我的编译dll,发现资源的名称是不正确的。我重新命名了,现在看起来很好。

一个小小的修改帮我解决了这个问题。

我有3个项目参考资料的解决方案:

connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

我改为:

connectionString="metadata=res://*/;

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

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

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

也许你会得到这个错误

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

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

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

希望对你有所帮助

最终的解决方案(即使在另外两台机器上以及EDMX和其他设备上重新创建数据库之后)是不使用Entity Framework的第一版。期待在。net 4.0中再次评估它。

在再次遇到同样的问题并四处寻找答案之后,我终于找到了一个遇到同样问题的人。visualstudio的向导似乎没有正确地生成连接字符串,而且到元数据资源的链接缺少一个重要路径。

v1.0错误?:无法加载指定的元数据资源。脚本!=模型

更新2013-01-16:已经过渡到几乎完全使用EF Code First实践(即使是现有的数据库),这个问题不再是一个问题。对我来说,这是一个可行的解决方案,可以减少自动生成的代码和配置带来的混乱,并增加我自己对产品的控制。