Я сталкивался с этой проблемой раньше. Я просто не могу вспомнить, что это было причиной. Я также пытаюсь реализовать это с помощью таблиц AspNetUsers и AspNetRoles. Я не уверен, является ли это частью проблемы или нет.
Так вот моя модель:
public class MenuPermission
{
[Key]
public string Id { get; set; }
public string MenuId { get; set; }
public virtual Menu Menu_MenuId { get; set; }
public string RoleId { get; set; }
public virtual RoleDTO Role_RoleId { get; set; }
public string UserId { get; set; }
public virtual ExpandedUserDTO User_UserId { get; set; }
public int? SortOrder { get; set; }
public bool IsForNavBar { get; set; }
public bool IsCreate { get; set; }
public bool IsRead { get; set; }
public bool IsUpdate { get; set; }
public bool IsDelete { get; set; }
}
Вот внешние ключи в SQL Сервер:
ALTER TABLE [dbo].[MenuPermission] WITH CHECK
ADD CONSTRAINT [FK_dbo.MenuPermission_dbo.AspNetRoles_RoleId]
FOREIGN KEY([RoleId]) REFERENCES [dbo].[AspNetRoles] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[MenuPermission] CHECK CONSTRAINT [FK_dbo.MenuPermission_dbo.AspNetRoles_RoleId]
GO
ALTER TABLE [dbo].[MenuPermission] WITH CHECK
ADD CONSTRAINT [FK_dbo.MenuPermission_dbo.AspNetUsers_UserId]
FOREIGN KEY([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id])
GO
ALTER TABLE [dbo].[MenuPermission] CHECK CONSTRAINT [FK_dbo.MenuPermission_dbo.AspNetUsers_UserId]
Ошибка, которую я получаю при запуске Проект:
SqlException: Неверное имя столбца 'Role_RoleId_Id'.
Неверное имя столбца 'User_UserId_UserName'.
Это строка кода, которая вызывает проблему:
var global = HttpRuntime.Cache.Get(cacheItemKey);
if (global == null)
{
LINE OF ERROR --> global = db.MenuPermissions.Where(i => i.RoleId == RoleId || i.UserId == userId).ToArray();
HttpRuntime.Cache.Insert(cacheItemKey, global, null, DateTime.Now.AddMinutes(2), System.Web.Caching.Cache.NoSlidingExpiration);
}
РЕДАКТИРОВАТЬ: Это код, который происходит от:
public ActionResult GetGrid()
{
var tak = db.MenuPermissions.ToArray();
var result = from c in tak
select new string[] { c.Id.ToString(), Convert.ToString(c.Id),
Convert.ToString(c.Menu_MenuId !=null?c.Menu_MenuId.MenuText:""),
Convert.ToString(c.Role_RoleId.RoleName),
Convert.ToString(c.User_UserId !=null?c.User_UserId.UserName:""),
Convert.ToString(c.SortOrder),
Convert.ToString(c.IsForNavBar),
Convert.ToString(c.IsAdd),
Convert.ToString(c.IsCreate),
Convert.ToString(c.IsRead),
Convert.ToString(c.IsUpdate),
Convert.ToString(c.IsDelete),
};
return Json(new { aaData = result }, JsonRequestBehavior.AllowGet);
}
Изменить: Пользователь и модели представления ролей
public class RoleDTO
{
[Key]
public string Id { get; set; }
[Display(Name = "Role Name")]
public string RoleName { get; set; }
}
public class ExpandedUserDTO
{
[Key]
[Display(Name = "User Name")]
[Required(ErrorMessage = "Please enter User Name")]
public string UserName { get; set; }
[Display(Name = "User Id")]
public string UserId { get; set; }
[Display(Name = "Email address")]
[Required(ErrorMessage = "The Email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
[StringLength(255, MinimumLength = 8)]
[Required(ErrorMessage = "The Password is required")]
public string Password { get; set; }
[Display(Name = "Lockout End Date UTC")]
public DateTime? LockoutEndDateUtc { get; set; }
public int AccessFailedCount { get; set; }
public string PhoneNumber { get; set; }
public string CompanyName { get; set; }
public IEnumerable<UserRolesDTO> Roles { get; set; }
[Required(ErrorMessage = "The Roles is required")]
public string Role { get; set; }
}
ОБНОВЛЕНИЕ: Я добавил новый ViewModel UsersDTO только с идентификатором и именем пользователя. Идентификатор является ключевым. У меня больше нет ошибки на стороне пользователя.
По-прежнему возникают проблемы с ролями ...
ОБНОВЛЕНИЕ:
Вот что сейчас работает:
Добавлено UserDTO
public virtual UserDTO User_UserId { get; set; }
Модель:
public class UserDTO
{
[Key]
[Display(Name = "User Id")]
public string UserId { get; set; }
[Display(Name = "User Name")]
public string UserName { get; set; }
}
Добавлен внешний ключ к:
[ForeignKey("RoleId")]
public virtual RoleDTO Role_RoleId { get; set; }