在MVC4中显示用户名和角色

时间:2013-12-19 11:52:21

标签: asp.net-mvc asp.net-mvc-4

我想创建一个简单的管理面板来编辑用户角色。首先,我想用他们的角色显示用户列表。

首先,我在AccountModel中编辑了一些内容:

上下文:

public class UsersContext : DbContext
{
    public UsersContext()
        : base("DefaultConnection")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<UserRole> UserRole { get; set; }
}

用户个人资料:

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string EmailId { get; set; }
    public string Details { get; set; }
    public virtual ICollection<UserRole> UserRole { get; set; }
}

用户角色:

[Table("webpages_Roles")]
public class UserRole
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int RoleId { get; set; }
    public string RoleName { get; set; }
    public virtual ICollection<UserProfile> UserProfile { get; set; }
}

之后我用ActionResult Index创建了UserController:

public ActionResult Index()
{
    using (var db = new UsersContext())
    {
        return View(db.UserProfiles.Include("UserRole").ToList());
    }
}

观看:

@model IEnumerable<AnimeWeb.Models.UserProfile>

@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
    <th>
        User Name
    </th>

    <th>
        User Role
    </th>
</tr>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.UserName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.UserRole)
    </td>
</tr>

}

UserRole的部分视图如下所示:

@model AnimeWeb.Models.UserRole

<tr>
    @Html.DisplayFor(model => model.RoleName),
</tr>

当我尝试执行它时,我得到InnerException错误:“无效的对象名称'dbo.UserRoleUserProfiles'。”。我不太明白。有人可以解释一下为什么会发生这种情况以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

似乎问题就在这里

public virtual ICollection<UserRole> UserRole { get; set; }

并且您没有这些类的映射,因此默认设置会创建一个UserRoleUserProfiles表(或类),并且它在数据库中不存在,因此会出现问题。

您可以尝试删除此行代码,然后再次尝试运行该项目