Entity framework core EntityFrameworkCore:如何在用户第一次使用应用程序时初始化数据库并为其设定种子

Entity framework core EntityFrameworkCore:如何在用户第一次使用应用程序时初始化数据库并为其设定种子,entity-framework-core,Entity Framework Core,我已经使用Microsoft Visual Studio 2015和EntityFrameworkCore构建了一个项目 我有两个虚拟数据,我正在开发我的解决方案。现在,我想在服务器中部署,但我遇到了一个问题,第一次启动应用程序时,它会崩溃,因为它找不到数据库和数据 我已经通过谷歌搜索找到了Visual Studio 2013和以前版本的解决方案,使用了CreateDatabaseIfNotExists类,该类需要包:System.Data.Entity (),但是,EntityFramewor

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

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

我已经通过谷歌搜索找到了Visual Studio 2013和以前版本的解决方案,使用了CreateDatabaseIfNotExists类,该类需要包:System.Data.Entity (),但是,EntityFrameworkCore中不存在此类类和包

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

或者哪一个等同于实体框架核心中的System.Data.Entity

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();
            }
        }
    }
}
此代码将在每次应用程序启动时运行,因此您需要准确无误,不要覆盖任何非关键数据更改(如更改用户评论等)


您可以使用
MusicStore
app作为示例:连接字符串是否正确?是的,它在我的本地开发计算机中工作。但是当试图在另一台计算机上启动项目时,它会崩溃,因为getall方法找不到任何数据库。我需要在某人第一次使用该应用程序或移动到另一台计算机时创建一个数据库。所以,我需要像CREATEDATABASEIFDOESNOTEXISTS这样的类来初始化DB,以防第一次使用是的,我认为连接字符串在您的计算机上是正确的,显然不是在服务器上。服务器应该在哪里创建数据库?这些信息应该在它的连接字符串中。事实上,我很高兴EF Core没有尝试创建数据库本身。你必须有意识地告诉它,并且你可以放心地相信,在你的应用程序开始工作之前,你需要先运行迁移。
CreateDbAndSampleData(app.ApplicationServices);