我使用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