Asp.Net core Mvc 扩展IdentityUser的属性 ef实体化
实体控制类
public class IdentityDbContext: Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext<RegisterViewModel>
{
public IdentityDbContext(DbContextOptions<IdentityDbContext> options) : base(options)
{
}
public DbSet<RegisterViewModel> registerViewModels { get; set; }
}
实体类(实体类继承自IdentityUser并增添一些新的方法)
public class RegisterViewModel:IdentityUser
{
public string Password { get; set; }
}
注册实体服务(这是必须的,缺一不可)
//注册数据库服务
services.AddDbContext<DataContext>(
options => {
options.UseSqlServer(_configuration.GetConnectionString("DefaultConnection"));
});
services.AddDbContext<IdentityDbContext>(
options =>
{
options.UseSqlServer(configurationString);
});
使用的代码中注入服务
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
using MoviesApp.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace MoviesApp.Controllers
{
public class AcountController:Microsoft.AspNetCore.Mvc.Controller
{
private readonly SignInManager<RegisterViewModel> _signInManager;
private readonly UserManager<RegisterViewModel> _userManager;
public AcountController( SignInManager<RegisterViewModel> signInManager,UserManager<RegisterViewModel> userManager)
{
this._signInManager = signInManager;
this._userManager = userManager;
}
public IActionResult Login()
{
return View();
}
//登录
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel loginViewModel)
{
if (!ModelState.IsValid)
{
//判断是否输入了用户名密码,如果不是传回这个方法
return View(loginViewModel);
}
//查询——userManager用户组里有没有这个用户名对象
var user = await _userManager.FindByNameAsync(loginViewModel.UserName);
//如果存在用户,查看密码是否正确
if (user != null)
{
var result = await _signInManager
.PasswordSignInAsync(user, loginViewModel.Password, false, false);
if (result.Succeeded)
{
return RedirectToAction("Index","Home");
}
}
ModelState.AddModelError("", "用户名或密码错误");
return View(loginViewModel);
}
public IActionResult Register()
{
return View();
}
//注册
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel registerViewModel)
{
if (ModelState.IsValid)
{
var user = new RegisterViewModel
{
UserName = registerViewModel.UserName
};
var result = await _userManager.CreateAsync(user, "666666");
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
}
return View(registerViewModel);
}
[HttpPost]
public async Task<IActionResult> Logout()
{
await _signInManager.SignOutAsync();
return RedirectToAction("Index", "Home");
}
public IActionResult GetUsers()
{
if (_userManager.Users != null)
{
var Iq = _userManager.Users.ToList();
return View("userList", Iq);
}
else
{
return View(nameof(GetUsers));
}
}
}
}
遇到的问题:
提示:No migrations configuration type was found in the assembly 'MoviesApp'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).
使用 EntityFrameworkCore\加命令即可;
如果注册的的接口服务中有用到数据化实体化类,需要先做数据库迁移,否则就会报错,无法创建服务
下面是全部源代码