C# 自动迁移和手动调用更新数据库

C# 自动迁移和手动调用更新数据库,c#,asp.net-mvc-4,entity-framework-6,automatic-migration,C#,Asp.net Mvc 4,Entity Framework 6,Automatic Migration,即使启用了自动迁移,我是否也必须在package manager控制台中手动发出更新数据库命令 我在运行MVC4和EF6。这个解决方案是针对.NET4的(不幸的是,我不能改变这一点) 编辑:我知道代码迁移之间的区别,这需要我正确地为现有表设置种子。这个问题更多的是基于一个场景,在这个场景中,我添加了一个没有关系的表,我认为它会运行吗 编辑2:应自动添加的表格 ============ 新表定义 public class InboundFile : Entity { [Required]

即使启用了自动迁移,我是否也必须在package manager控制台中手动发出
更新数据库
命令

我在运行MVC4和EF6。这个解决方案是针对.NET4的(不幸的是,我不能改变这一点)

编辑:我知道代码迁移之间的区别,这需要我正确地为现有表设置种子。这个问题更多的是基于一个场景,在这个场景中,我添加了一个没有关系的表,我认为它会运行吗

编辑2:应自动添加的表格

============

新表定义

public class InboundFile : Entity
{
    [Required]
    public String FilePath { get; set; }
}
EF配置文件

    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
        MigrationsDirectory = @"Migrations";
    }

    protected override void Seed(Unifi.Context.DBContext context)
    {
        context.InboundFiles.AddOrUpdate(
            x => x.FilePath,
            new InboundFile { CreateDate = DateTime.Now, ModifiedDate = DateTime.Now, FilePath = "c:/test", IsDeleted = false }
        );
    }
DB上下文

公共类DBContext:DBContext {

public DBContext()
:base(“MyConn”)
{
}
公共数据库集用户{get;set;}
公共数据库集用户角色{get;set;}
公共数据库集区域{get;set;}
公共DbSet InboundFiles{get;set;}
}

更新数据库
触发“更新”操作。您可以运行应用程序,应用程序启动时将更新数据库


我更喜欢手动运行
更新数据库
,因为我可以查看是否存在任何数据库迁移错误。

尝试将其放在应用程序启动时

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DbContext, Configuration>);
using (var temp = new DbContext()) {
    temp.Database.Initialize(true);
}
Database.SetInitializer(新的MigrateDatabaseToLatestVersion);
使用(var temp=new DbContext()){
临时数据库初始化(true);
}

这将迫使它运行
更新数据库
,并在每次应用程序启动时执行
种子

对,这就是我有点困惑的地方。我在上下文中添加了另一个表,没有关系,因此无需担心错误,然后运行应用程序。让我感到奇怪的是,即使我启用了自动迁移,表也没有添加到我的数据库中。更奇怪的是,我随后手动发布了
updatedatabase
,它发现并运行了一个自动迁移。我不确定这是否重要,但我在不同的项目中拥有web和上下文,作为整个解决方案的一部分。您能为您的表共享新代码吗。我希望看到db上下文和实体类本身的变化。DbContext本身在哪里?我不认为这是相关的,但我添加了它。完美!这正是我想要的
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DbContext, Configuration>);
using (var temp = new DbContext()) {
    temp.Database.Initialize(true);
}