我正在使用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有什么不同。
答案 0 :(得分:1)
看起来像是在改变:
_userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(identDb));
要:
_userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(identDb));
现在正在工作。但是我仍然不清楚为什么IdentityUser没有工作或者它与ApplicationUser有什么不同。