EntityFrameworkCore:如何初始化數據庫並在用戶第一次使用應用程序時播種它

entity-framework-core

我使用Microsoft Visual Studio 2015和EntityFrameworkCore構建了一個項目。

我手動種子幾個虛擬數據,我正在開發我的解決方案。現在,我想在服務器中部署,但是我遇到的問題是,第一次啟動應用程序時,它會崩潰,因為它找不到數據庫和數據。

我已經google了,我找到了Visual Studio 2013和之前使用需要包的CreateDatabaseIfNotExists類的解決方案: System.Data.Entityhttp://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in -code-first.aspx )但是,EntityFrameworkCore中不存在這樣的類和包。

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

或者它與Entity Framework Core中的System.Data.Entity等效?

熱門答案

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

創建這樣的方法:

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

並在Configure方法結束時從Startup.cs調用它:

CreateDbAndSampleData(app.ApplicationServices);

此代碼將在每個應用程序啟動時運行,因此您需要準確並且不要覆蓋任何非關鍵數據更改(例如更改用戶的註釋等)

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



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow