MetadataException:无法加载指定的元数据资源

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MetadataException:无法加载指定的元数据资源相关的知识,希望对你有一定的参考价值。

突然间,我一直在获取MetadataException实例化我生成的ObjectContext课程。 App.Config中的连接字符串看起来是正确的 - 自上次工作以来没有改变 - 我尝试从底层数据库重新生成一个新模型(edmx文件)而没有任何变化。

有人有主意吗?

更多细节:我没有更改任何属性,我没有更改任何输出程序集的名称,我没有尝试在程序集中嵌入EDMX。我离开工作只等了10个小时,直到我回来。然后它不再工作了。

我试过重新创建EDMX。我试过重新创建这个项目。我甚至尝试从头开始重新创建数据库。没有运气,无论如何。

答案

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

  • 您可能已将模型的MetadataArtifactProcessing属性更改为“复制到输出目录”。
  • 连接字符串可能是错误的。我知道你说你没有改变它,但是如果你改变了其他东西(比如装配的名称),它仍然可能是错的。
  • 您可能正在使用后编译任务将EDMX嵌入到程序集中,该程序集由于某种原因不再起作用。

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

更新:我写过a blog post with more complete steps for troubleshooting

另一答案

对于我的情况,它通过更改edmx文件的属性来解决。

  1. 打开edmx文件
  2. 右键单击EDMX设计器的任何位置
  3. 选择属性
  4. 更新称为“元数据工件处理”的属性为“嵌入输出程序集”

这解决了我的问题。问题是,当容器试图找到元数据时,它无法找到它。所以只需在同一个组件中进行。如果您将edmx文件放在另一个程序集中,则此解决方案将无法运行

另一答案

我花了一整天时间来解决这个错误

如果你正在使用n-tear architecture

或者你试图通过separate Models生成的EDMX形式DataAccessLayer到DomainModelLayer

也许你会得到这个错误

  1. 第一个故障排除步骤是确保webconfig (UILayer)and和appconfig (DataAccessLayer)中的连接字符串相同
  2. 第二个是非常重要的connection string connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provid..... 这是问题所在

从地球上我得到Modelor什么.csdl在我的连接字符串中他们在哪里

在这里,我的解决方案看看图片

enter image description here

希望对你有所帮助

另一答案

当我在构建新的.edmx设计器之前不清理解决方案时,这种情况发生在我身上。因此,在构建新的.edmx设计器之前,不要忘记清理解决方案。这有助于我跳过更多这个问题。提供导航详细信息,这是视觉工作室的新功能。

单击 - >构建 - >清洁解决方案

然后单击 - >构建 - >重建解决方案

希望这可以帮助。感谢大家

另一答案

我能够在Visual Studio 2010,VB.net(ASP.NET)4.0中解决这个问题。

在实体模型向导期间,您将能够看到实体连接字符串。从那里,您可以复制并粘贴到您的连接字符串中。

我唯一缺少的是“App_Code”。在连接字符串中。

entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"
另一答案

最终解决方案(即使在其他两台机器上重建数据库,以及EDMX和其他杂物)也不使用第一版的Entity Framework。期待在.NET 4.0中再次评估它。

在再次遇到同样的问题并搜索到所有问题之后,我终于找到了一个有同样问题的人。 Visual Studio的向导似乎没有正确生成连接字符串,并且元数据资源的链接缺少重要路径。

v1.0 BUG?: Unable to load the specified metadata resource. Scripts != Models

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

另一答案

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

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

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

经过数小时的谷歌搜索,并试图解决所有建议的解决方案。我在这里列出了几个解决方案。我也注意到了一个适合我的方法。 (我使用的是EF版本6.1.1和SQL Server 2014 - 但是使用的是较旧的数据库)

  1. 重建项目并重试。
  2. 关闭并打开VS - 我不知道这是如何工作的
  3. 确保您已将.EDMX文件放在目录中,请确保在ConnectionString中包含目录。例如我的是DAL文件夹。它看起来像这样:connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;(这些是文件。看到它们你可以在解决方案资源管理器中切换显示所有文件,在〜/ obj / ..目录下)

...以及我尝试过的更多内容[例如:将EntityFramework版本还原到更高版本(不确定)]


什么对我有用:

从这个article here,它帮助我解决了我的问题。我刚刚在EDMX文件中将ProviderManifestToken="2012"更改为ProviderManifestToken="2008"。去做这个:

Solution Explorer

  1. 右键单击文件.edmx
  2. 打开用..
  3. CML编辑器
  4. 使用2008更改ProviderManifestToken =“XXXX”

我希望有所帮助。

另一答案

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

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

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

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

将指定csdl / ssdl / msl xml存储在模型文件'WidgetModel.edmx'中,该文件存储在名为'MyModel'的文件夹中。

另一答案

我编写了这个帮助器类来创建ObjectContext对象的实例,当它们在与使用它的项目不同的项目中定义时。我解析配置文件中的连接字符串,并用完整的程序集名称替换'*'。

它并不完美,因为它使用反射来构建对象,但它是我能找到的最通用的方法。

希望它可以帮助某人。

public static class EntityHelper<T> where T : ObjectContext
{
    public static T CreateInstance()
    {
        // get the connection string from config file
        string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString;

        // parse the connection string
        var csBuilder = new EntityConnectionStringBuilder(connectionString);

        // replace * by the full name of the containing assembly
        csBuilder.Metadata = csBuilder.Metadata.Replace(
            "res://*/",
            string.Format("res://{0}/", typeof(T).Assembly.FullName));

        // return the object
        return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T;
    }
}
另一答案

对于所有SelftrackingEntities用户,如果您已经按照Microsoft Walk-through并将Object上下文类分离到wcf服务项目(通过链接到上下文.tt),那么这个答案适合您:

本文中显示的答案的一部分,包括以下代码:

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

不会为你工作!!原因是YourObjectContextType.Assembly现在位于不同的Assembley(在wcf项目组件内),

所以你应该用 - >替换YourObjectContextType.Assembly.FullName

ClassTypeThatResidesInEdmProject.Assembly.FullName 

玩得开心。

另一答案

这个小改动有助于解决这个问题。

我有3个项目的解决方案。

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

改成

connectionString="metadata=res://*/;
另一答案

我遇到了同样的错误信息。关闭并重新打开Visual Studio 2010解决了我的问题。

另一答案

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

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

然后它工作得很好。

另一答案

遇到同样的问题,我从数据库重新创建了edmx。解决了我的问题。

另一答案

例外是因为编译器指向不存在的元数据,所以只需将app.config连接字符串复制到Web.config ConnectionString

另一答案

如果您使用来自其他项目的edmx,则在连接字符串中,更改...

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

...至...

metadata=res://*/DataModel.csdl
另一答案

我也有与Rick相同的问题和解决方案,除了我将现有的.edmx导入到一个新项目中,虽然基本命名空间无关紧要,但它被导入到一个不同的子目录中,所以我还必须更新连接Web.Config里面的三个字符串,包括不同的子目录命名:

另一答案

当我们将解决方

以上是关于MetadataException:无法加载指定的元数据资源的主要内容,如果未能解决你的问题,请参考以下文章

JAVA无法加载指定的文件?

“无法加载指定的元数据资源”错误实体框架

由于错误 0xC001000A,无法加载包。说明:无法从 SQL Server 数据库加载指定的包

SQL Server Compact 错误:无法加载 DLL 'sqlceme35.dll'。指定的模块无法找到

java的软件无法启用 无法加载指定文件。

SSIS - 无法加载 DLL 'clrcompression.dll':找不到指定的模块