C# 实体框架核心运行种子
我使用EF Core创建C# 实体框架核心运行种子,c#,entity-framework-core,C#,Entity Framework Core,我使用EF Core创建AppDBContext和AppDbContextSeed: AppDbContextSeed public class AppDbContextSeed { private readonly AppDbContext _dbContext; private UserManager<AppUser> _userManager; private RoleManager<AppRole> _roleManager; p
AppDBContext
和AppDbContextSeed
:
AppDbContextSeed
public class AppDbContextSeed
{
private readonly AppDbContext _dbContext;
private UserManager<AppUser> _userManager;
private RoleManager<AppRole> _roleManager;
public AppDbContextSeed(AppDbContext dbContext, UserManager<AppUser> userManager,
RoleManager<AppRole> roleManager)
{
_dbContext = dbContext;
}
public async Task Seed()
{
...
await _dbContext.SaveChangesAsync();
}
}
公共类AppDbContextSeed
{
私有只读AppDbContextu dbContext;
私人用户管理器(UserManager);;
私人角色经理(RoleManager);;
公共AppDbContextSeed(AppDbContext、UserManager、UserManager、,
角色经理(角色经理)
{
_dbContext=dbContext;
}
公共异步任务种子()
{
...
wait_dbContext.saveChangesSync();
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<AppDbContextSeed>();
}
public void配置服务(IServiceCollection服务)
{
services.AddTransient();
}
program.cs
public static void Main(string[] args)
{
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var appDbContextSeed = services.GetService<AppDbContextSeed>();
appDbContextSeed.Seed().Wait();
}
catch (Exception ex)
{
var logger = services.GetService<ILogger<Program>>();
logger.LogError(ex, "An error occurred while seeding the database");
}
}
host.Run();
}
publicstaticvoidmain(字符串[]args)
{
var host=BuildWebHost(args);
使用(var scope=host.Services.CreateScope())
{
var services=scope.ServiceProvider;
尝试
{
var appDbContextSeed=services.GetService();
appDbContextSeed.Seed().Wait();
}
捕获(例外情况除外)
{
var logger=services.GetService();
logger.LogError(例如,“对数据库进行种子设定时发生错误”);
}
}
host.Run();
}
当我运行
add migration
和update database
时,不会将appDbContextSeed
中的数据插入数据库。我做错了什么?您将种子执行放在只在应用程序启动时运行的Main
方法上。如果希望在执行更新数据库
命令的同时执行种子方法,则需要遵循EF Core 2.1中种子数据的新功能。该功能在实体配置HasData
上添加了一个新方法,允许您添加一些初始数据
这是功能文档的摘录:
数据种子设定允许提供初始数据以填充数据库。
与EF6不同,EF Core中的种子数据与实体相关联
作为模型配置的一部分键入。然后可以进行EF核心迁移
自动计算需要执行的插入、更新或删除操作
将数据库升级到模型的新版本时应用
我建议您阅读文档,了解如何使用该新功能。看起来还可以,但与更新数据库的(预期)关系是什么?这是在启动时运行的,您需要检查每次是否需要播种。感谢您对我的帮助(如)