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\加命令即可;
如果注册的的接口服务中有用到数据化实体化类,需要先做数据库迁移,否则就会报错,无法创建服务

下面是全部源代码


posted @ 2020-11-04 00:30  李花花小番茄  阅读(245)  评论(0编辑  收藏  举报