前言

由于我们现在每次EF实体模型变化的时候每次都是手动更改,我们想通过代码的方式让他自动更新,或者程序启动的时候添加一些数据进去

DbContextSeed初始化

首先,在Data文件夹下添加一个ApplicationDbContextSeed.cs初始化类

  1. using Microsoft.AspNetCore.Identity;
  2. using MvcCookieAuthSample.Models;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using Microsoft.Extensions.DependencyInjection;
  8.  
  9. namespace MvcCookieAuthSample.Data
  10. {
  11. public class ApplicationDbContextSeed
  12. {
  13. private UserManager<ApplicationUser> _userManager;
  14.  
  15. public async Task SeedAsync(ApplicationDbContext context, IServiceProvider services)
  16. {
  17. if (!context.Users.Any())
  18. {
  19. _userManager = services.GetRequiredService<UserManager<ApplicationUser>>();
  20.  
  21. var defaultUser = new ApplicationUser
  22. {
  23. UserName="Administrator",
  24. Email="786744873@qq.com",
  25. NormalizedUserName="admin"
  26. };
  27.  
  28. var result= await _userManager.CreateAsync(defaultUser,"Password$123");
  29. if (!result.Succeeded)
  30. {
  31. throw new Exception("初始默认用户失败");
  32. }
  33. }
  34. }
  35. }
  36. }

那么如何调用呢?接下来我们写一个WebHost的扩展方法类WebHostMigrationExtensions.cs来调用ApplicationDbContextSeed方法

  1. using Microsoft.AspNetCore.Hosting;
  2. using Microsoft.EntityFrameworkCore;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using Microsoft.Extensions.DependencyInjection;
  8. using Microsoft.Extensions.Logging;
  9.  
  10. namespace MvcCookieAuthSample.Data
  11. {
  12. public static class WebHostMigrationExtensions
  13. {
  14. public static IWebHost MigrateDbContext<TContext>(this IWebHost host, Action<TContext, IServiceProvider> sedder) where TContext : DbContext
  15. {
  16. using (var scope=host.Services.CreateScope())
  17. {//只在本区间内有效
  18. var services = scope.ServiceProvider;
  19. var logger = services.GetRequiredService<ILogger<TContext>>();
  20. var context = services.GetService<TContext>();
  21.  
  22. try
  23. {
  24. context.Database.Migrate();
  25. sedder(context, services);
  26.  
  27. logger.LogInformation($"执行DBContext {typeof(TContext).Name} seed执行成功");
  28. }
  29. catch (Exception ex)
  30. {
  31. logger.LogError(ex, $"执行DBContext {typeof(TContext).Name} seed方法失败");
  32. }
  33. }
  34.  
  35. return host;
  36. }
  37. }
  38. }

那么我们程序启动的时候要怎调用呢?

要在Program.cs中执行

我们接下来把数据库删掉,然后启动程序运行一下

数据库已自动生成并插入数据

源码点击下载

Core2.2版本源码

【ASP.NET Core快速入门】(十六)MVC开发:DbContextSeed初始化的更多相关文章

  1. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  2. ASP.NET Core 2.2 : 十六.扒一扒2.2版更新的新路由方案

    原文:ASP.NET Core 2.2 : 十六.扒一扒2.2版更新的新路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不大 ...

  3. ASP.NET Core快速入门--学习笔记系列文章索引目录

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 抓住国庆假期的尾巴完成了此系列课程的学习笔记输出! ASP.NET Core快 ...

  4. 【笔记目录2】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

    当前标签: ASP.NET Core快速入门 共2页: 上一页 1 2  任务27:Middleware管道介绍 GASA 2019-02-12 20:07 阅读:15 评论:0 任务26:dotne ...

  5. 【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

    当前标签: ASP.NET Core快速入门 共2页: 1 2 下一页  任务50:Identity MVC:DbContextSeed初始化 GASA 2019-03-02 14:09 阅读:16 ...

  6. ASP.NET Core快速入门(第6章:ASP.NET Core MVC)--学习笔记

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务40:介绍 1.Individual authentication 模板 ...

  7. ASP.NET Core快速入门_学习笔记汇总

    第2章 配置管理 任务12:Bind读取配置到C#实例 任务13:在Core Mvc中使用Options 任务14:配置的热更新 任务15:配置框架设计浅析 第3章 依赖注入 任务16:介绍- 任务1 ...

  8. 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

    命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...

  9. 【ASP.NET Core快速入门】(六)配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...

  10. ASP.NET Core 快速入门(Razor Pages + Entity Framework Core)

    引子 自从 2009 年开始在博客园写文章,这是目前我写的最长的一篇文章了. 前前后后,我总共花了 5 天的时间,每天超过 3 小时不间断写作和代码调试.总共有 8 篇文章,每篇 5~6 个小结,总截 ...

随机推荐

  1. Spring-Docker简易指南

     使用代码:https://files.cnblogs.com/files/miracle9527/demo4springboot.rar # 约定#为注释行.$为命令行 # 开始操作前将demo4s ...

  2. vue将指定区域的表格数据或element-ui中el-table的数据单笔或多笔批量导出excel

    公司在后台管理系统开发中用到了 vue+element-ui 组合的框架,但随着需求的越来越复杂,前端的工作难度也呈几何倍数递增,工作量随之增大.这不,在项目中增加一个将列表数据导出为excel的需求 ...

  3. [LeetCode] Inorder Successor in BST II 二叉搜索树中的中序后继节点之二

    Given a binary search tree and a node in it, find the in-order successor of that node in the BST. Th ...

  4. Js 运行机制和Event Loop

    一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...

  5. 05 - json转成树状结构

    var jsonData = eval(`[ {"id":"4","pid":"1","name": ...

  6. centos7防火墙配置

    一.在工作中远程连接经常通过堡垒机连接,不能直接开启防火墙.所以就需要写入配置文件中 编译配置文件   /etc/firewalld/zones/public.xml <?xml version ...

  7. MVVM简介与运用

    在介绍MVVM框架之前,先给大家简单介绍一下MVC.MVP框架(由于本博文主要讲解MVVM,所以MVC和MVP将简化介绍,如果需要我将在以后的博文中补充进来). MVC框架: M-Model : 业务 ...

  8. 通过ffi在node.js中调用动态链接库[转]

    http://blog.csdn.net/zhulin2609/article/details/51474676

  9. mysql 删除指定字符

    mysql 删除指定字符 1.1 前言        实际需求中如果想删除指定的字符,一般需要使用到trim函数.trim函数默认删除字符的前后空格,如果想指定删除特定字符,则需要使用一下语句进行声明 ...

  10. android颜色color.xml设置

     XML Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...