我在我的MVC5应用程序中使用实体框架版本6。我的数据模型(.edmx)包含2个与用户和角色
用户表包含列:Id int,Name nVarchar(100), RoleId int(RoleId具有使用Roles.Id的外键约束)
角色表包含列:Id int,Name nVarchar(100)
我的实体模型按表结构生成正确的实体。
现在,当我从DB上下文查询用户实体(_db.Users.ToList())时,实体框架正在用户表而不是RoleId列中查找Role_Id列,从而导致错误。
所以我的问题是为什么实体框架查询生成器在查询实体时正在寻找Role_Id列?
答案 0 :(得分:0)
用户和角色通常具有多对多关系,因此您应该在用户和角色中定义相应的关系。
public class Users
{
public int Id { get; set; }
public string UserName { get; set; }
public virtual ICollection<Role> Roles{ get; set; }
}
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<User> Users{ get; set; }
}
如果您想要为关系添加更多属性,您还可以将关联明确定义为实体:
public class UserRoles// Association table implemented as entity
{
public int UserId{ get; set; }
public virtual User User{ get; set; }
public int RoleId{ get; set; }
public virtual Role Role{ get; set; }
public DateTime AssignmentDate{ get; set; }
}
最后,您还可以使用DataAnnotions Create Foreign Key using Data Annotations
答案 1 :(得分:0)
我在EF中错误定义字段/属性时发生了这种情况。
不正确/原始(添加_
)
public Guid PCardRequestLineItemId;
public PCardRequestLineItem PCardRequestLineItem;
正确(未添加_
)
public Guid PCardRequestLineItemId { get; set; }
public virtual PCardRequestLineItem PCardRequestLineItem { get; set; }