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

有人有什么想法吗?

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

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


当前回答

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

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

其他回答

在我的情况下,这个问题与重命名我的模型的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”的文件夹中。

当我得到元数据问题排序,我有一个后续的问题,形式是调用异常无法找到app.config中XXXEntities的连接字符串(其中我的目标是不依赖app.config)。幸运的是,我找到了引用系统。我的单元测试项目中的数据清除了最后的障碍。总结一下:

使用nuget将实体框架安装到单元测试项目中。 确保System. data . entity和System. data . entity。引用数据。 按照这里的描述对连接字符串进行排序。 将连接字符串传递给分部类构造函数。

现在我的元数据在一个类库中,这个类库可以从引用db更新,并且我可以在运行时将我的应用程序和单元测试指向任何服务器上的任何db。

附录:当我移动我的edmx到一个文件夹,我又得到了错误。经过一些研究,我发现您希望元数据字符串看起来像:metadata=res://EPM.DAL/Models.EPM。其中EPM. csdl。DAL是组装和EPM的名称。Edmx在models文件夹中。

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

在我的案例中,EDMX的XML结构中的语法错误也是原因。我发现在VS无法显示图表之后,我打开了XML编辑器。

之前的合并是导致语法错误的根本原因。

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

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

……

metadata=res://*/DataModel.csdl