MVC4 EF代码第一次数据库初始化在生产中不完整

MVC4 EF代码第一次数据库初始化在生产中不完整

问题描述:

我创建了一个使用MVC4的网站,并且我更新了框架到4.5.1。MVC4 EF代码第一次数据库初始化在生产中不完整

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

我有简单的会员资格。当我放弃我的本地数据库并启动应用程序时,我完全创建了所有表。

Local database

然而,当我在生产服务器上部署(FTP),我只有表的子集。

Production database

这就是在Global.asax.cs中我试图this

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); 
     } 

后显然做了,这是context.Database.Create();在生产中表现不同。

我已经部署了完整的MVC4应用程序和完整的MVC5应用程序。但这是我第一次部署一个更新到.net 4.5.1的MVC4应用程序(我不知道这是否有帮助)。

有什么想法?

编辑(添加的DbContext样品)

公共类GlobalDbContext:的DbContext { 公共GlobalDbContext() :基部( “DefaultConnection”) {}

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; } 
    [***] 
} 
+0

你可以发布你的'DbContext'类的样本吗?很可能您的'DbContext'正在使用不同的连接字符串,因此不会为您的实体类创建表,即使成员资格提供程序能够创建它的表。 – Claies 2014-09-04 04:57:33

+0

您正在使用'CreateDatabaseIfNotExists'策略,那么您是否将数据库放在Prod中?如果没有,这将不会做任何事情。您需要使用“DropCreateDatabaseIfModelChanges”或“DropCreateDatabaseAlways”或您自己的自定义数据库初始值设定项。通常在PROD中,您不想丢弃数据库,因为您将丢失现有数据,因此您需要使用自定义初始化程序。在本地,丢弃/重新创建不是问题。 – Mrchief 2014-09-05 19:19:54

项目,验证的列表:

  1. 4.5.1是否安装在生产服务器上
  2. 生产服务器上的sql server的权限是否相同?

  3. 添加一个尝试捕捉周围创建数据库调用

见进行数据迁移的其他问题如下

EntityFramework 6.0 CreateDatabaseIfNotExists Code first to create database

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