MigrateDatabaseToLatestVersion seed()不会在数据库中创建表

时间:2014-10-07 11:11:17

标签: ef-code-first ef-migrations

在我的MVC项目中,我想使用自动迁移和自动更新数据库。

我有一个AppActivator类 - 我初始化DB:

[assembly: WebActivator.PreApplicationStartMethod(typeof(AppActivator), "PreStart")]
[assembly: PostApplicationStartMethod(typeof(AppActivator), "PostStart")]
[assembly: ApplicationShutdownMethod(typeof(AppActivator), "Stop")]

namespace Manual.Web
{
    public static class AppActivator
    {
        public static void PreStart()
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<ManualContext, Configuration>());

            MeasurementConfig.RegisterUnits();
            MiniProfilerPreStart();    
        }
 ...
}

配置类 - 我称之为种子函数:

    public  class Configuration : DbMigrationsConfiguration<ManualContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;
        }

        protected override void Seed(ManualContext context)
        {
            //if (context.Items != null && context.Items.Count() == 0)
            try
            { 
                ManualDbInitializerSeed.SeedForDB(context); 
            }
            catch(Exception ex){
            }

        }
    }

种子功能:

public static void SeedForDB(ManualContext context)
        {
            foreach (MI_Item s in RegisterItemsConfig.GetConfig().Items)
            {
                Item st = new Item { Key = s.Name, DefaultUnknownItem = s.DefaultUnknown };
                context.Items.Add(st);
            }
            context.SaveChanges();
...
}

但是在保存更改时 - 我收到此错误:

"Invalid object name 'dbo.Items'." {System.Data.SqlClient.SqlException}

当我查看SQL管理工作室时,我看到有一个新的数据库“手册”,但它只有迁移表,没有剩下的表。

如果我使用CreateDatabaseIfNotExists它可以正常工作 - 但它不支持迁移,因此对我来说这不是一个好的解决方案。

我不想在SQL中编写所有代码,因为我失去了代码优先的所有优势。

0 个答案:

没有答案