通过webhost扩展方式初始化EFCore数据库
通过webhost扩展方式初始化EFCore数据库
1.定义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();
}
通过webhost扩展方式初始化EFCore数据库的更多相关文章
- openstack初始化Glance数据库时报错解决方式
环境为win7+virtualbox 中的centos6.5 安装Glance 的包 yum install openstack-glance python-glanceclient -y 配置Gla ...
- SQL Server 重新初始化系统数据库中的单引号问题
在最近的数据库跨机房迁移中,由于硬件的限制,需要滚动式地将数据库一台台迁移到新机房,先在新机房搭建一个新环境,将数据迁移过去,再将旧机房的机器下架搬到新机房,重新配置后用于下一轮的升级,重新配置过程中 ...
- Android数据的四种存储方式之SQLite数据库
Test.java: /** * 本例解决的问题: * 核心问题:通过SQLiteOpenHelper类创建数据库对象 * 通过数据库对象对数据库的数据的操作 * 1.sql语句方式操作SQLite数 ...
- php笔记08:数据库编程---使用php的MySQL扩展库操作MySQL数据库
1.使用php的MySQL扩展库操作MySQL数据库: php有3种方式操作MySQL数据库 (1)mysql扩展库 (2)mysqli扩展库 (3)pdo mysql扩展库与mysql数据库 ...
- jQuery插件主要有两种扩展方式
jQuery插件主要有两种扩展方式: 扩展全局函数方式. 扩展对象方法方式. 扩展全局函数方式 扩展全局函数方式定义的插件,即类级别插件,可以通过jQuery.extend()来进行定义.定义格式为: ...
- 实战MEF(1):一种不错的扩展方式
在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序.这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而 ...
- 一步一步学习underscore的封装和扩展方式
前言 underscore虽然有点过时,这些年要慢慢被Lodash给淘汰或合并. 但通过看它的源码,还是能学到一个库的封装和扩展方式. 第一步,不污染全局环境. ES5中的JS作用域是函数作用域. 函 ...
- 为operamasks增加HTML扩展方式的组件调用
#为operamasks增加HTML扩展方式的组件调用 ##背景 之前的[博文](http://www.cnblogs.com/p2227/p/3540858.html)中有提及到,发现easyui中 ...
- EF初始化mysql数据库codefirst
EF使用Code First修改生成数据库表名的方法 1. 重写OnModelCreating,去掉表名复数 System.Data.Entity.ModelConfiguration.Convent ...
随机推荐
- Jenkins(5)生成allure报告
前言 jenkins集成了allure插件,安装插件后运行pytest+allure的脚本即可在jenkins上查看allure报告了. allure安装 在运行代码的服务器本机,我这里是用的dock ...
- shell脚本将字符串按指定分隔符切分成数组
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下: array_name=(value1 value2 ... valuen) keyword=1,sdg,dd ...
- 流媒体传输协议之 RTP (上篇)
本系列文章将整理各个流媒体传输协议,包括 RTP/RTCP,RTMP,希望通过深入梳理协议的设计细节,能够给流媒体领域的开发者带来一定的启发. 作者:逸殊 审核:泰一 介绍 RTP,即 real-ti ...
- Selenium刚玩一会儿,就感受了私人秘书的体验
学习python的过程中,少不了接触第三方库,毕竟作为胶水语言python的强大之处也就是第三方库体量庞大,无疑大大增强了python的战斗力. 有时候想完成网页自动化操作,这时候Selenium进入 ...
- 接口测试框架Requests
目录 Requests Requests安装 Requests常见接口请求方法构造 请求目标构造 header构造 cookie 构造请求体 Get Query请求 Form请求参数 JSON请求体构 ...
- String的20个方法
String的20个方法 面试题 1.new和不new的区别 String A="OK"; String B="OK";//会去常量池查找有没有"Ok ...
- VSCode VUE常用配置
{ // vscode默认启用了根据文件类型自动设置tabsize的选项 "editor.detectIndentation": false, // 重新设定tabsi ...
- Mysql(三)------事务的特性、事务并发、事务读一致性问题
1 什么是数据库的事务? 1.1 事务的典型场景 在项目里面,什么地方会开启事务,或者配置了事务?无论是在方法上加注解,还 是配置切面 <tx:advice id="txAdvice& ...
- 二、mycat基础知识、基本配置
官网 http://www.mycat.io/ Mycat 概要介绍 https://github.com/MyCATApache/Mycat-Server 入门指南 https://github.c ...
- xss之htmlspecialchars
源代码: 可以看到是用htmlspecialchars 对get参数message进行处理,但是他默认不对单引号进行处理的. 只对预定义的字符进行处理: & (和号)成为 & &quo ...