实体类型 IdentityRole 不是当前上下文模型的一部分

The entity type IdentityRole is not part of the model for the current context

我在我的 MVC 项目上实现 ASPNetIdentity 时遇到问题 我在 var 行中收到此错误(实体类型 IdentityRole 不是当前上下文模型的一部分。):

using System;
using System.Linq;
using System.Web.Mvc;

using EZ.Models;
using Microsoft.AspNet.Identity.EntityFramework;

namespace EZ.Controllers
{
public class RoleController : Controller
{
    ApplicationDbContext context;

    public RoleController()
    {
        context = new ApplicationDbContext(); 
    }



    /// <summary>
    /// Get All Roles
    /// </summary>
    /// <returns></returns>
    public ActionResult Index()
    {
        var roles = context.Roles.ToList();
        return View(roles);
    } 

    /// <summary>
    /// Create  a New role
    /// </summary>
    /// <returns></returns>
   // GET: /Roles/Create
    public ActionResult Create()
    {
        return View();
    }

    //
    // POST: /Roles/Create
    [HttpPost]
    public ActionResult Create(FormCollection collection)
    {
        try
        {
            context.Roles.Add(new Microsoft.AspNet.Identity.EntityFramework.IdentityRole()
            {
                Name = collection["RoleName"]
            });
            context.SaveChanges();
            ViewBag.ResultMessage = "Role created successfully !";
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    } 

    /// <summary>
    /// Set Role for Users
    /// </summary>
    /// <returns></returns>
    public ActionResult SetRoleToUser()
    {
        var list = context.Roles.OrderBy(role => role.Name).ToList().Select(role => new SelectListItem { Value = role.Name.ToString(), Text = role.Name }).ToList();
        ViewBag.Roles = list;
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult UserAddToRole(string uname, string rolename)
    {
        ApplicationUser user = context.Users.Where(usr => usr.UserName.Equals(uname, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();

        // Display All Roles in DropDown

        var list = context.Roles.OrderBy(role => role.Name).ToList().Select(role => new SelectListItem { Value = role.Name.ToString(), Text = role.Name }).ToList();
        ViewBag.Roles = list;

        if (user != null)
        {
            var account = new AccountController();
            account.UserManager.AddToRoleAsync(user.Id, rolename);

            ViewBag.ResultMessage = "Role created successfully !";

            return View("SetRoleToUser");
        }
        else
        {
            ViewBag.ErrorMessage = "Sorry user is not available";
            return View("SetRoleToUser");
        }

    }
}

}

我已经在我的数据库中编写了表格。

这与 CodeProject.com 的 role-security-mvc5-master 项目中的代码完全相同。唯一的区别是我移动了数据库中的表并且更改了连接字符串。我缺少的是什么?

在我的 IdentityModel.cs 我有:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

如果您需要更多代码,请告诉我,我会post。

创建项目时,identity,数据库在locadb。当我移动数据库中的表时,我用我为 E 创建的连接字符串覆盖了整个默认连接字符串。这里的大问题是默认连接需要 providerName="System.Data.SqlClient" /> 而不是 providerName="System.Data.EntityClient".那里要小心。感谢 Daniel Eagle 的这篇优秀文章:http://danieleagle.com/blog/2014/05/setting-up-asp-net-identity-framework-2-0-with-database-first-vs2013-update-2-spa-template/。关于如何首先使用 Identity with DB 的大量详细信息。