您的位置:首页 > 编程语言 > ASP

【ASP.NET Core快速入门】(十六)MVC开发:DbContextSeed初始化

2018-01-09 19:38 866 查看

前言

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

DbContextSeed初始化

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

using Microsoft.AspNetCore.Identity;
using MvcCookieAuthSample.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;

namespace MvcCookieAuthSample.Data
{
public class ApplicationDbContextSeed
{
private UserManager<ApplicationUser> _userManager;

public async Task SeedAsync(ApplicationDbContext context, IServiceProvider services)
{
if (!context.Users.Any())
{
_userManager = services.GetRequiredService<UserManager<ApplicationUser>>();

var defaultUser = new ApplicationUser
{
UserName="Administrator",
Email="786744873@qq.com",
NormalizedUserName="admin"
};

var result= await _userManager.CreateAsync(defaultUser,"Password$123");
if (!result.Succeeded)
{
throw new Exception("初始默认用户失败");
}
}
}
}
}


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

using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace MvcCookieAuthSample.Data
{
public static class WebHostMigrationExtensions
{
public static IWebHost MigrateDbContext<TContext>(this IWebHost host, Action<TContext, IServiceProvider> sedder) 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();
sedder(context, services);

logger.LogInformation($"执行DBContext {typeof(TContext).Name} seed执行成功");
}
catch (Exception ex)
{
logger.LogError(ex, $"执行DBContext {typeof(TContext).Name} seed方法失败");
}
}

return host;
}
}
}


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

要在Program.cs中执行



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



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

源码点击下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐