我还有一个IsInRole失败的案例:(我通过创建一个运行.NET Framework 4.5和MVC作为选定模板的MVC 5项目来启动我的应用程序。然后创建了一些用户,分配了角色并添加了以下验证_Layout.cshtml
@if (User.IsInRole("Instructor"))
{
<li>@Html.ActionLink("Instructors", "Index", "Instructor")</li>
}
一切正常,直到我需要实现OnModelCreating,因为我需要在User表中的用户之间建立一对多的关系。这种变化看起来像这样:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ApplicationUser>()
.HasMany(p => p.RelatedUsers)
.WithMany()
.Map(m =>
{
m.MapLeftKey("Id");
m.MapRightKey("RelatedId");
m.ToTable("users_related");
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
}
这是问题的开始。 BTW,由于某种原因这样做会将表名更改为Identity [aspnet表的名称],所以由于我没有任何数据,我决定只是从头开始重新创建数据库并调查如何正确以后搭建它。
创建了数据库,种子方法创建了用户,角色和分配的角色,用户运行没有问题,所有内容都插入到表中,但IsInRole刚刚停止工作。
根据我在stackoverflow和其他网站上找到的答案,我已经尝试过,但没有成功,以下内容:
我唯一可以让它再次运行的是删除OnModelCreating方法。这完全恢复了IsInRole功能(仅用于记录,Roles.GetRolesForUser(&#34; user&#34;)。包含(&#34;角色&#34;)永远不会返回true,无论是否存在OnModelCreating,Roles.IsUserInRole确实返回true。)
请帮忙!我上床睡觉,醒来想着这个验证有什么问题。我无法理解角色与实现OnModelCreating之间的关系。
谢谢,