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

有人有什么想法吗?

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

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


当前回答

在将一个大的解决方案从源代码管理资源管理器的一个文件夹移动到另一个文件夹后,我得到了这个问题。我们没有把包文件夹检查到Team Foundation,所以我认为VS会自动下载包。这将我的EF表单v6.1.2升级到v6.1.3。

当我降级到最初的v6.1.2时,这个问题就消失了。

其他回答

经过数小时的谷歌搜索和尝试解决建议的解决方案没有一个有效。我在这里列出了几个解决方案。我也注意到了对我有用的方法。(我使用的是EF版本6.1.1,SQL server 2014 -但旧的DB)

重新构建项目并重试。 关闭和打开VS -我不知道这是怎么回事 确保如果你已经把。edmx文件放在一个目录中,确保你在你的连接字符串中包含了目录。例如,我的是在DAL文件夹。所以它看起来是这样的:connectionString="metadata=res://*/ dal . nammodel .csdl|res://*/ dal . nammodel .ssdl|res://*/ dal . nammodel .msl;你可以在解决方案资源管理器中切换显示所有文件,在~/obj/..目录)

...以及更多我尝试过的方法[比如:将EntityFramework版本恢复到后来的版本(不确定)]


对我有用的是:

这篇文章帮助我解决了我的问题。我只是在EDMX文件中将我的ProviderManifestToken=“2012”更改为ProviderManifestToken=“2008”。这样做:

解决方案资源管理器

右键单击文件。edmx 开放与. . XML编辑器 使用2008更改ProviderManifestToken="XXXX"

我希望这对你有所帮助。

和一个快速的方法来检查模型名称没有Reflector....查找目录

...obj - {} - edmxResourcesToEmbed输出配置

检查.csdl、.msl和.ssdl资源文件是否存在。如果它们在子目录中,则子目录的名称必须加在模型名称之前。

例如,我的三个资源文件在一个子目录Data中,所以我的连接字符串必须是

元= res: / / * Data.MyModel.csdl | res: / * / Data.MyModel.ssdl | res: / * / Data.MyModel.msl;

(与元= res: / / * / MyModel csdl | res: / / * / MyModel ssdl | res: / / * / MyModel msl;)。

我也遇到了类似的问题。我的类名与我的文件名不同。生成的connectionstring中包含类名而不是文件名。对我来说,解决方案就是重命名我的文件以匹配类名。

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

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

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

:

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

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