通过webhost扩展方式初始化EFCore数据库

1|0通过webhost扩展方式初始化EFCore数据库

2|01.定义WebHostMigrationExtensions类

public static class WebHostMigrationExtensions { public static IWebHost MigrationDbContext<TContext>(this IWebHost host, Action<TContext, IServiceProvider> seeder) where TContext : DbContext { using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; var logger = services.GetRequiredService<ILogger<TContext>>(); var context = services.GetService<TContext>(); try { context.Database.Migrate(); seeder(context, services); logger.LogInformation($"执行DbContext{typeof(TContext).Name} seed执行成功!"); } catch (Exception ex) { logger.LogError(ex, $"执行DbContext{typeof(TContext).Name} seed执行失败!"); } } return host; } }
public class ApplicationContextSeed { private UserManager<User> _userManager; public async Task SeedAsync(ApplicationDbContext context,IServiceProvider service) { if (!context.Users.Any()) { _userManager = service.GetRequiredService<UserManager<User>>(); var defaultUser = new User { UserName = "Luna@qq.com", Email = "Luna@qq.com", NormalizedEmail= "Luna@qq.com", NormalizedUserName = "admin" }; var result = await _userManager.CreateAsync(defaultUser, "pwd123456"); if (!result.Succeeded) { throw new Exception("初始化数据库失败"); } } } }

2.在buildWebHost中调用

public static void Main(string[] args) { BuildWebHost(args) .MigrationDbContext<ApplicationDbContext>((context, services) => { new ApplicationDbContextSeed().SeedAsync(context, services).Wait(); }) .Run(); }

__EOF__

本文作者明明.如月
本文链接https://www.cnblogs.com/mmry/p/9547657.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   明明.如月  阅读(380)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示