EF 6 Code First Migration - 控制迁移脚本执行和创建DB模式的顺序

时间:2014-09-26 02:13:43

标签: entity-framework asp.net-mvc-4 entity-framework-6 database-schema ef-migrations

这是我在SO中的第一个问题,尽管我已经提到了相当长一段时间的问题。

我最近正在为现有数据库执行代码优先迁移,以将其迁移到最新版本。我的数据库初始化程序使用默认策略“CreateDatabaseIfNotExists”,我正在使用SQL Server 2012 express。

以下是用于迁移的步骤: 1.使用较旧的数据库v1和相应的代码版本cv1启用迁移。使用-IgnoreChanges选项生成初始迁移脚本。使用此迁移更新了数据库。 2.使用最新的代码版本cv2,使用较旧的数据库v1。添加了迁移以生成架构更改和更新数据库的实际迁移脚本

这适用于现有数据库,并且已成功迁移到最新版本。

但对于新数据库,数据库已创建,但播种没有发生。在调试时,我注意到即使在创建DB模式之前,迁移脚本也会先执行。

迁移脚本失败,因为尚未添加正在迁移的表。

注意: 我已关闭AutomaticMigrationsEnabled进行迁移。

请注意,对于我正在使用的早期版本的EF-4.3,上述类似的方法工作正常。

这是App_Start中的代码:

Database.SetInitializer(new DBLayer.Models.MyDBInitializer());             使用(MyDBContext db = new MyDBContext())             {                 db.Database.Initialize(假);

            if (!db.Database.Exists())
            {
                ((IObjectContextAdapter)db).ObjectContext.CreateDatabase();                    
            }

            //Initializing membership APIs
            MembershipInitializer.InstallServices(); 

在上面的代码中,在db.Database.Initialize之后,迁移脚本正在执行,因为尚未添加表,因此会抛出错误。

在禁用迁移和创建新数据库时,情况再次正常。

我的问题是:

  1. 如何控制此序列以执行迁移脚本,以便在执行迁移脚本之前首先添加表。我在这里错过了什么?
  2. 当自动迁移关闭时,哪些迁移脚本首先执行?
  3. 请指教。如果您需要更多信息,请与我们联系。

0 个答案:

没有答案