我想创建一个简单的管理面板来编辑用户角色。首先,我想用他们的角色显示用户列表。
首先,我在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'。”。我不太明白。有人可以解释一下为什么会发生这种情况以及如何解决这个问题?
答案 0 :(得分:1)
似乎问题就在这里
public virtual ICollection<UserRole> UserRole { get; set; }
并且您没有这些类的映射,因此默认设置会创建一个UserRoleUserProfiles
表(或类),并且它在数据库中不存在,因此会出现问题。
您可以尝试删除此行代码,然后再次尝试运行该项目