2013-08-02 3 views
2

Я хочу, чтобы наша исходная база данных была загружена пользователями (для веб-приложения ASP.NET) при установке. По какой-то причине он работает неправильно. Я прочитал множество тем, которые в основном говорят, что запустить update-database, который отлично работает с консолью, но как это работает в производственной среде?EF Code first, seeding and deployment

Как попытка обойти это, я получил следующий код - что мне здесь не хватает?

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) вставьте этот код в ваш Application_Start из global.asax :

// 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

Смежные вопросы