【问题标题】:EF6, Code-First, enable-migrations, "Unable to load the specified metadata resource"EF6,代码优先,启用迁移,“无法加载指定的元数据资源”
【发布时间】:2013-11-06 17:12:52
【问题描述】:

我创建了一个包含 3 个实体类和一个 DbContext 的 C# 类库,用于代码优先生成数据库。版本 1 一切顺利。我创建了一个单独的测试库,并且带有 DbContext 类的类库的行为符合预期。

现在,我想让其中一个字段成为必填字段,并遵循代码优先的约定,我在实体类的属性中添加了一个 [Required] 属性。下一步是启用迁移。

我进入包管理器控制台,输入“enable-migrations”,然后……砰……“无法加载指定的元数据资源”。

作为参考,我的 DbContext 类包括:

public OrganisationsContext()
    : base("Leegz_Entities_Organisations")
{
    this.Configuration.LazyLoadingEnabled = false;
    this.Configuration.ProxyCreationEnabled = false;
}

public DbSet<Organisation> Organisations { get; set; }
public DbSet<Member> Members { get; set; }
public DbSet<LeegzUser> LeegzUsers { get; set; }

我的 app.config 包含:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="Leegz_Entities_Organisations" connectionString="data source=NEIL-INSPIRON\NEILDEV;initial catalog=TheLeegz;integrated security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="Leegz.Entities.Organisations.DbSecuritySchema" value="Leegz.Entities.Organisations"/>
  </appSettings>
</configuration>

我已经看到了很多关于这个主题的帖子,但他们似乎都在谈论 EDMX 模型文件的参考元素中的错误。但是,由于我使用了代码优先,我没有模型(也许我在这里遗漏了一步),所以我看到的与连接字符串中的 EDMX 信息相关的建议似乎并不向我申请。

有什么想法吗?

【问题讨论】:

  • 您的解决方案中是否有一个或几个项目?
  • 我在解决方案中有多个项目,Alexander。感谢您在下面的建议。

标签: entity-framework code-first entity-framework-migrations entity-framework-6


【解决方案1】:

我遇到了类似的问题,但结果不同。由于调试时间太长,这里有一些提示。

  1. “无法加载指定的元数据资源”。错误与您的连接字符串有关。
  2. 首先检查您拥有所有实体的项目中的连接字符串。
  3. 确保连接字符串适用于 Code First 方法,而不是 Model FirstDatabase First 方法(请参见下面的示例) .
  4. 在解决方案中的所有项目中重复这些步骤,其中您有一个与 DbContext 相关的连接字符串。
  5. 然后,重试Enable-Migrations 命令,它应该可以正常工作。

模型第一个连接字符串示例:

<add name="MyContext" 
    connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=MY_DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" />

代码优先连接字符串示例:

<add name="MyContext" 
    connectionString="Data Source=.;Initial Catalog=MY_DB;Integrated Security=True;MultipleActiveResultSets=True" 
    providerName="System.Data.SqlClient"/>

【讨论】:

  • 我有同样的问题,我的连接是数据库第一
  • 谢谢!老实说,我们需要多少种方式连接到 SqlClient? +1
  • 它有效,但我花了 5 分钟额外的时间,才认识到最后一行的额外差异:providername="System.Data.S q l Client"
  • 对这个问题的许多帖子/回复都说“检查您的连接字符串”,但没有人说明模型优先字符串与代码优先字符串有何不同
【解决方案2】:
  1. 如果解决方案中有多个项目,请确保在包管理器控制台窗口中选择了带有 dbContext 的项目。
  2. 迁移使用名称等于 DbContext 类的 connectionString。在您的情况下,它是 OrganisationsContext,但不是 Leegz_Entities_Organisations。

【讨论】:

  • 谢谢!!!!当我更改连接字符串以匹配 DbContext 类的名称时,问题就解决了。所以...... DbContext 类在其构造函数中建立了一个特定的 ConnectionString,因此该库在运行时工作正常。但是,我认为您是说迁移过程无法读取构造函数中包含的值,因此只需使用 DbContext 类名。这将与问题(以及您提供的解决方案)相关。您知道是否可以自定义(告诉)迁移以使用特定名称作为连接字符串?
  • 别提了)。据我所知,运行时使用的 DbContext 构造函数中的 connectionStringName 。在迁移中,您可以添加参数 -ConnectionStringName(有关帮助,请参阅 get-help Enable-migrations)。
【解决方案3】:

从 EF 4/5/6 模型优先/数据库优先切换到代码优先时,我忽略了删除 \bin 和 \obj 文件夹,并且在迁移和读取数据时遇到了同样的错误。之后,这个错误就消失了。

将模型优先/数据库优先更改为代码优先:

  1. 将连接字符串从 EF(带有元数据信息)更改为传统的 ADO。
  2. 删除 EDMX 文件和所有子文件(.tt、.cs 模型等)
  3. 删除项目的 \bin 和 \obj。

此时您的项目应该处于代码优先模式。

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2023-03-10
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多