EntityFrameworkCore:如何初始化数据库,并在用户第一次使用应用程序时将其种子化



我使用Microsoft Visual Studio 2015和EntityFrameworkCore构建了一个项目。

我有种子手动几个虚拟数据,我正在开发我的解决方案。现在,我想在服务器上部署,但我遇到的问题是,第一次启动应用程序时,它崩溃了,因为它没有找到数据库和数据。

我已经谷歌了,我找到了Visual Studio 2013和以前使用CreateDatabaseIfNotExists类需要包的解决方案:System.Data.Entity(http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx),但是,在EntityFrameworkCore中不存在这样的类和包。

如果用户第一次在EntityFrameworkCore中使用我的应用程序,我如何创建和填充至少一行的数据库?

或它相当于System.Data。实体框架核心中的实体 ?

Rowan Miller说ApplyMigrations足以创建数据库(如果不存在)并应用所有(必要的)迁移。

创建如下方法:

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.cs和SampleData.cs

相关内容

最新更新