我使用Microsoft Visual Studio 2015和EntityFrameworkCore构建了一个项目。
我手动种子几个虚拟数据,我正在开发我的解决方案。现在,我想在服务器中部署,但是我遇到的问题是,第一次启动应用程序时,它崩溃了,因为它没有找到数据库和数据。
我已经google了,我找到了Visual Studio 2013和之前的解决方案,使用了需要该软件包的 CreateDatabaseIfNotExists 类: System.Data.Entity (http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx)但是,EntityFrameworkCore中不存在这样的类和包。
如果用户第一次在EntityFrameworkCore中使用我的应用程序,如何创建并填充至少一行的数据库?
或者它与Entity Framework Core中的 System.Data.Entity 相同?
答案 0 :(得分:2)
Rowan Miller says 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();
}
}
}
}
并在Startup.cs
方法结束时从Configure
拨打电话:
CreateDbAndSampleData(app.ApplicationServices);
此代码将在每个应用启动时运行,因此您需要准确并且不要覆盖任何非关键数据更改(例如更改用户评论等)
您可以使用MusicStore
个应用作为示例:Startup.cs和SampleData.cs