RoleManager工作但UserManager给出“实体类型IdentityUser不是当前上下文模型的一部分。”错误

时间:2015-06-20 00:18:41

标签: c# asp.net-mvc entity-framework asp.net-mvc-5 asp.net-identity-2

我正在使用EF6 Code First构建MVC 5应用程序,并且在尝试构建一些基本用户管理界面时遇到了问题。我收到的错误是“实体类型IdentityUser不是当前上下文模型的一部分”。

守则:

服务层:

public class CoreService
{
    private IPrincipal User;
    private IdentityDb identDb;
    private CoreDb coreDb;
    private RoleManager<IdentityRole> _roleManager;
    private UserManager<IdentityUser> _userManager;

    public CoreService()
    {
        User = HttpContext.Current.User;
        identDb = new IdentityDb();
        coreDb = new CoreDb();
        _roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(identDb));
        _userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(identDb));
    }

    public void TestIdentityManagers(string roleName, string userName)
    {
        var role = _roleManager.FindByName(roleName);
        var user = _userManager.FindByName(userName);
    }
}

数据库上下文:

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

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

我的应用程序使用_roleManager添加,删除和操作角色都没有问题,因此我知道数据库连接字符串正在运行。

我是EF6 Code First和Identity 2.0的新手,所以我确定我在这里遗漏了一些东西。

我需要_userManagement立即使用是访问.GetRoles(userId)方法。我已经写了一个工作来使用以下数据来获取数据:

List<string> rolesMemberOf = (from x in identDb.Users.Where(x => x.Id == userId).FirstOrDefault().Roles.Select(x => x.RoleId)
                                     join y in _roleManager.Roles on x equals y.Id
                                     select y.Name).ToList();

但是,如果我可以修复UserManager,它似乎会更清晰,更容易。

修改

看起来像是在改变:

_userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(identDb));

要:

_userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(identDb));

现在正在工作。但是我仍然不清楚为什么IdentityUser没有工作或者它与ApplicationUser有什么不同。

1 个答案:

答案 0 :(得分:1)

看起来像是在改变:

_userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(identDb));

要:

_userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(identDb));

现在正在工作。但是我仍然不清楚为什么IdentityUser没有工作或者它与ApplicationUser有什么不同。