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

有人有什么想法吗?

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

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


当前回答

我的问题和解决方案,症状是相同的“无法加载指定的元数据资源”,但根本原因不同。我在解决方案中有两个项目,一个是EntityModel,另一个是解决方案。实际上,我在EntityModel中删除并重新创建了EDMX文件。

解决方案是,我必须回到Web应用程序项目,并将这一行添加到配置文件中。新模型改变了一些必须在“其他”项目的Web中复制的项。配置文件。旧的结构不再适用了。

     <add name="MyEntities"
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;
                    data source=Q\DEV15;initial catalog=whatever;
                    user id=myuserid;password=mypassword;
                    multipleactiveresultsets=True;
                    application name=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

其他回答

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

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

然后它运行得很好。

经过数小时的谷歌搜索和尝试解决建议的解决方案没有一个有效。我在这里列出了几个解决方案。我也注意到了对我有用的方法。(我使用的是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"

我希望这对你有所帮助。

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

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

这意味着应用程序无法加载EDMX。有几种情况会导致这种情况。

您可能已经将模型的MetadataArtifactProcessing属性更改为Copy to Output Directory。 连接字符串可能错误。我知道您说您没有更改它,但如果您更改了其他内容(例如,程序集的名称),它仍然可能是错误的。 您可能正在使用编译后任务将EDMX嵌入到程序集中,但由于某种原因该程序集中不再工作。

简而言之,你的问题中没有足够的细节来给出准确的答案,但希望这些想法能让你走上正确的轨道。

更新:我已经写了一篇博客文章,介绍了更完整的故障排除步骤。

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