2014-08-29 92 views
3

我創建了一個使用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

回答

0

確保帳戶應用程序用於登錄到SQL服務器具有在數據庫服務器上創建對象所需的權限。