C# MVC4 EF代码第一次数据库初始化在生产中未完成

C# MVC4 EF代码第一次数据库初始化在生产中未完成,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我使用MVC4创建了一个网站,并将框架更新为4.5.1 在开发阶段,一切都很完美。我首先使用实体框架代码启用了迁移,并创建了一个迁移“Init” 我有简单的会员资格。当我删除本地数据库并启动应用程序时,我已经完美地创建了所有表 但是,当我在生产服务器上部署(FTP)时,我只有一部分表 这是我尝试后在Global.asax.cs中所做的 要验证的项目列表: 是否在生产服务器上安装了4.5.1 sql server在生产服务器上的权限是否相同 围绕create database调用添加一个try

我使用MVC4创建了一个网站,并将框架更新为4.5.1

在开发阶段,一切都很完美。我首先使用实体框架代码启用了迁移,并创建了一个迁移“Init”

我有简单的会员资格。当我删除本地数据库并启动应用程序时,我已经完美地创建了所有表

但是,当我在生产服务器上部署(FTP)时,我只有一部分表

这是我尝试后在Global.asax.cs中所做的


要验证的项目列表:

  • 是否在生产服务器上安装了4.5.1
  • sql server在生产服务器上的权限是否相同

  • 围绕create database调用添加一个try catch

  • 有关迁移的其他问题,请参见以下内容


    确保应用程序用于登录SQL Server的帐户具有在数据库服务器上创建对象所需的权限。

    能否发布
    DbContext
    类的示例?很可能您的
    DbContext
    使用了不同的连接字符串,因此没有为实体类创建表,甚至成员资格提供程序也可以创建它的表。您使用的是
    CreateDatabaseIfNotExists
    策略,那么您是否要在Prod中删除数据库?如果没有,这将不会起任何作用。您需要使用
    DropCreateDatabaseIfModelChanges
    DropCreateDatabaseAlways
    或您自己的自定义DB初始值设定项。通常在PROD中,您不希望删除DB,因为您将丢失现有数据,因此需要使用自定义初始值设定项。在本地,删除/重新创建不是问题。
    internal void Application_Start()
            {
                MvcHandler.DisableMvcResponseHeader = true;
                Database.SetInitializer(
                    new MigrateDatabaseToLatestVersion<GlobalDbContext, Migrations.Configuration>("DefaultConnection"));
                AreaRegistration.RegisterAllAreas();
    
                GlobalConfiguration.Configure(WebApiConfig.Register);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                AuthConfig.RegisterAuth();
    
                using (var context = new GlobalDbContext())
                {
                    if (!context.Database.Exists())
                    {
                        // Register the SimpleMembership database without Entity Framework migration schema
                        //((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                        context.Database.Create();
                    }
                    ////context.Database.Initialize(true);
                    //context.Database.Delete();
                    //context.Database.Create();
    
                }
                WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "Username", autoCreateTables: true);
            }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Database.SetInitializer<GlobalDbContext>
            (
                new CreateDatabaseIfNotExists<GlobalDbContext>()
            );
            //using model builder here
            base.OnModelCreating(modelBuilder);
    
        }
    
        public DbSet<Patient> dbSet1 { get; set; }
        [***]
    }