【问题标题】:what is wrong with my code first migration?我的代码第一次迁移有什么问题?
【发布时间】:2016-07-04 02:11:46
【问题描述】:

这是我的迁移和播种代码:

internal sealed class Configuration : DbMigrationsConfiguration<AuthDb>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            ContextKey = "Service.DAL.AuthDb";
        }

    }
public class CreateOrRunMigrations: CreateDatabaseIfNotExists<AuthDb>
    {
        public override void InitializeDatabase(AuthDb context)
        {
            base.InitializeDatabase(context);
            var migrator = new DbMigrator(new Migrations.Configuration());
            migrator.Update();

        }

        protected override void Seed(AuthDb context)
        {
            base.Seed(context);

            // add Default product and company

        }

    }

上下文是这样构造的

public class AuthDb : DbContext
    {
        public AuthDb() : base("name=xxx")
        {
            Database.SetInitializer(new CreateOrRunMigrations());
            Configuration.LazyLoadingEnabled = false;
            Configuration.ProxyCreationEnabled = false;            
            Configuration.AutoDetectChangesEnabled = true;
        }
   }

我想要的是:

  1. 第一次创建数据库时,添加种子数据。

  2. 当我对模型进行更改时,迁移代码会自动将更改应用到数据库。

当我进行更改(例如公司)并使用 update_database 在控制台中添加迁移时,会创建迁移文件。但是当代码运行时,我收到一个错误,抱怨我的模型和数据库不再匹配。

当然不匹配,因为我刚刚进行了更改,我希望迁移将应用更改。然而,它没有。我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    您的初始化程序派生自 CreateDatabaseIfNotExists,因此它只会在数据库不存在时运行。尝试使其派生自 MigrateDatabaseToLatestVersion:

    public class CreateOrRunMigrations: MigrateDatabaseToLatestVersion<AuthDb>
    {
    
        // no need for InitializeDatabase override since that's what this initializer does...
    
        protected override void Seed(AuthDb context)
        {
            base.Seed(context);
    
            // add Default product and company
    
        }
    
    }
    

    【讨论】:

    • 如果我更改为 MigrateDatabaseToLatestVersion,播种方法会怎样?每次更新模型时都会运行吗?
    • 初始化程序种子仅在创建数据库时运行。每次执行更新数据库时都会运行迁移种子。因此,在前者中为新数据库添加任何种子,在后者中您在此过程中所做的任何更改。 blog.oneunicorn.com/2013/05/28/…
    猜你喜欢
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2015-10-27
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多