迁移数据库到最新版本的初始化程序无法创建数据库

10
我正在尝试使用EF Code First 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应该会创建到最新迁移的数据库...我错过了什么吗?
2个回答

10

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

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

3
被接受的答案可以解决其他人的问题,但我遇到了一个不同的问题:我删除了我的数据库并修改了模型,改变了我的DbContext中的一些类。当我运行应用程序时,它首次实例化并尝试使用DbContext时,由于最后一个迁移没有反映我在DbContext中所做的最新更改,因此数据库未被创建。为了解决这个问题,我只需在包管理器控制台上运行Add-Migration命令添加一个新的迁移,下一次应用程序启动时,数据库就会正确地被创建和使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接