2016-11-11 50 views
1

我已經使用Microsoft Visual Studio 2015和EntityFrameworkCore構建了一個項目。EntityFrameworkCore:如何初始化數據庫並在第一次用戶使用應用程序時進行播種

我手動收集了一些虛擬數據,我正在開發我的解決方案。現在,我想部署服務器,但是我遇到了第一次啓動應用程序的問題,由於它沒有找到數據庫和數據,因此它會崩潰。

我用Google搜索,我找到的Visual Studio 2013,並使用CreateDatabaseIfNotExists類,需要封裝以前的解決方案:System.Data.Entity的http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx),然而,這樣的類和包不存在在EntityFrameworkCore中。

如果用戶在EntityFrameworkCore中第一次使用我的應用程序,我如何創建並填充至少有一行的數據庫?

或者相當於System.Data.Entity在實體框架核心?

+0

連接字符串是否正確? –

+0

是的,它在我的本地開發計算機上工作。但是當試圖在另一臺計算機上啓動項目時,它會因爲getall方法找不到任何數據庫而崩潰。 我需要在第一次有人使用應用程序或移動到另一臺計算機時創建數據庫。 所以,我需要像CREATEDATABASEIFDOESNOTEXISTS類初始化一個數據庫,以防萬一第一次使用 –

+0

是的,我想你的*計算機上的連接字符串是正確的,顯然不是在服務器上。服務器應該在哪裏創建數據庫?該信息應該位於其連接字符串中。 –

回答

0

Rowan Miller saysApplyMigrations足以創建數據庫(如果不存在)並應用所有(需要)遷移。

這樣的創建方法:

public void CreateDbAndSampleData(IServiceProvider applicationServices) 
{ 
    using (var serviceScope = applicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope()) 
    { 
     using (var db = serviceProvider.GetService<ApplicationDbContext>()) 
     { 
      // This will [try to] create database 
      // and apply all necessary migrations 
      db.Database.AsRelational().ApplyMigrations(); 

      // then you can check for existing data and modify something 
      var admin = db.Users.Where(x => x.Name == "Superadmin").FirstOrDefault(); 
      if (admin == null) 
      { 
       db.Users.Add(new User {...}); 
       db.SaveChanges(); 
      } 
     } 
    } 
} 

從你Startup.cs調用它,在Configure方法的末尾:

CreateDbAndSampleData(app.ApplicationServices); 

該代碼將在每一個應用程序啓動時運行,所以你需要準確並且不覆蓋任何非關鍵數據更改(如更改用戶評論等)

您可以使用MusicStore應用程序作爲示例:Startup.csSampleData.cs

相關問題