MigrateDatabaseToLatestVersion初始化程序无法创建数据库

时间:2013-03-21 00:11:43

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

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

这是我的主要方法的主体

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

我读过的所有内容都说这就是我所需要的。 MyDbContext位于app.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应该创建数据库到最新的迁移...我错过了什么?

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

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

当我运行我的应用程序并且它实例化并且第一次尝试使用DbContext时,没有创建数据库,因为上次迁移没有反映我在{中所做的最后一次更改{1}}。为了解决这个问题,我只是在Package Manager控制台上运行DbContext命令添加了一个新的迁移,下次应用程序启动时,数据库被正确创建并sed。