Placek
Placek

Reputation: 699

Display UserName and Role in MVC4

I want to create an easy Admin panel for editing users roles. First I want to display users list with their roles.

First I edited some things in AccountModel:

Context:

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

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

User profile:

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; }
}

User roles:

[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; }
}

After that I created UserController with ActionResult Index:

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

And View:

@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>

}

Partial View for UserRole looks like this:

@model AnimeWeb.Models.UserRole

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

When I try to execute it I get InnerException error: "Invalid object name 'dbo.UserRoleUserProfiles'.". I dont quite get it. Could someone explain me why is this happening and how to resolve this?

Upvotes: 1

Views: 820

Answers (1)

albusshin
albusshin

Reputation: 4010

Seems like the problem lies here

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

And you don't have a mapping for these classes, so the default setting creates a UserRoleUserProfiles table(or class) and it doesn't exist in the database, so the problem occurs.

You can try remove this line of code and then try run the project again

Upvotes: 1

Related Questions