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

有人有什么想法吗?

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

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


当前回答

在我的情况下,这个问题与重命名我的模型的edmx文件有关…修正app.config连接字符串的csdl/ssdl/msl文件修复了我的问题。

如果您使用EF 4.0设计器来生成csdl/ssdl/msl,这3个“文件”实际上将存储在模型的主edmx文件中。在这种情况下,瓦卡斯的帖子几乎是正确的。重要的是要理解他示例中的“Model_Name”将需要更改为模型的.edmx文件的当前名称(不包含.edmx)。

此外,如果edmx文件不在项目的根级别,则需要在Model_Name前面加上相对路径,例如:

res://*/MyModel.WidgetModel.csdl|res://*/MyModel.WidgetModel.ssdl|res://*/MyModel.WidgetModel.msl

将指定csdl/ssdl/msl xml存储在模型文件'WidgetModel。它存储在名为“MyModel”的文件夹中。

其他回答

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

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

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

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

对我来说,我把数据访问层和用户界面层分开了。 每一层都有实体连接字符串。

在我将这两个分离的连接字符串修改为相同之前,我仍然发现下面的错误。

Unable to load the specified metadata resource

所以我让这两个层(DAL, UI)是相同的连接字符串,它的工作完美。

我的解决方案是使所有的连接字符串是相同的,无论他们已经提出。

我只是没有引用包含EDMX文件的类库。

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

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

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

我改为:

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

当我在构建新的.edmx设计器之前没有清理解决方案时,就会发生这种情况。因此,在构建新的。edmx设计器之前,不要忘记清理解决方案。这可以帮助我跳过很多问题。如果你是visual studio的新手,那么下面提供的导航细节。

点击- > Build >清洁解决方案 单击“->Build->Rebuild Solution”

希望这能有所帮助。谢谢大家