2013-08-02 87 views
2

我想在安裝時將我們的初始數據庫與用戶(對於ASP.NET Web應用程序)一起播種。由於某種原因,它不能正常工作。我讀過大量主題,主要是說運行update-database,這在控制檯上效果很好,但是它如何在生產環境中工作?EF代碼優先,播種和部署

作爲一個試圖繞過這個我已經結束了以下代碼 - 我在這裏失蹤了什麼?

的Global.asax.cs ::的Application_Start()

try 
{ 
    initializationError = null; 
    WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
} 
catch (Exception ex) 
{ 
    initializationError = ex; 
} 

// Initialize database and seed data 
Database.SetInitializer(new EntitiesContextInitializer()); 

// Now initialize it 
using (var context = new EMUI.Models.UsersContext()) 
{ 
    if (!context.Database.Exists()) 
    { 
     context.Database.Initialize(true); 
    } 
} 

EntitiesContextInitializer

internal sealed class EntitiesContextInitializer : MigrateDatabaseToLatestVersion<EMUI.Models.UsersContext, Configuration> 
{ 
} 

配置

internal sealed class Configuration : DbMigrationsConfiguration<EMUI.Models.UsersContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(EM.Models.UsersContext context) 
    { 
     if (!WebSecurity.Initialized) 
     { 
      WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
     } 

     if (!Roles.RoleExists("Administrator")) 
     { 
      Roles.CreateRole("Administrator"); 
     } 

     // More similar seeding 
    } 
} 

回答

1

你必須做以下步驟進行它的工作原理:

1)讓您的配置類作爲一個公共的,不是internal(遷移配置)

2)這段代碼粘貼到您的global.asax中的Application_Start :

// Now initialize it 
using (var context = new EMUI.Models.UsersContext()) 
{ 
    if (!context.Database.Exists()) 
    { 
      Configuration configuration = new Configuration(); 
      configuration.ContextType = typeof(EMUI.Models.UsersContext); 
      var migrator = new DbMigrator(configuration); 
      migrator.Update(); 
    } 
} 

希望它有幫助。

+0

這個爲我工作。 – Maris