2016-11-11 38 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

相关问题