【问题标题】:MigrateDatabaseToLatestVersion initializer failing to create databaseMigrateDatabaseToLatestVersion 初始化程序无法创建数据库
【发布时间】:2013-03-10 08:27:31
【问题描述】:

如果数据库不存在,我正在尝试使用 EF 代码优先迁移来构建数据库。到目前为止,我已经成功Enabled-Migrations。我还使用Add-Migrations 进行了构建数据库的初始迁移。脚本是迁移方向的,看起来是正确的。

这是我的 Main 方法的主体

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>());
var directConfigContext = new MyDbContext();

我所读到的所有内容都表明这就是我所需要的。 MyDbContextapp.config 中,看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <connectionStrings>
        <add name="MyDbContext" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=DbConfig;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

另外,如果我使用 EF 提供的 DbMigrator 类,数据库是正确构建的(大概是使用初始数据库迁移脚本)。

// This is how it actually works including creating the database if it doesn't exist.
var dbMigrator = new DbMigrator(new Configuration());
dbMigrator.Update();

据我了解,在 MyDbContext 上设置初始化程序,然后实例化 DbContext 应该创建数据库到最新的迁移......我错过了什么?

【问题讨论】:

    标签: c# entity-framework-5 entity-framework-migrations


    【解决方案1】:

    接受的答案将解决其他人的问题,但我遇到了同样的问题,原因不同:我删除了我的数据库并通过更改我的 DbContext 中的一些类来修改模型。

    当我运行我的应用程序,它第一次实例化并尝试使用 DbContext 时,没有创建数据库,因为上次迁移没有反映我在 DbContext 中所做的最后更改.为了解决这个问题,我简单地通过在包管理器控制台上运行Add-Migration 命令添加了一个新的迁移,并且在下次应用程序启动时数据库被正确地创建和 sed。

    【讨论】:

      【解决方案2】:

      实例化 DbContext 不会执行绑定到它的初始化程序。相反,您需要更新数据库或直接调用底层数据库的初始化程序。

      MyDbContext.MyEntity.Add(new MyEntity { Name = "Nelson" });
      // Or
      MyDb.Context.Database.Initialize(true); // force the initialization
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 2016-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        相关资源
        最近更新 更多