实体框架6使用外键列附加下划线

时间:2016-04-16 05:14:58

标签: entity-framework sql-server-2008 asp.net-mvc-5 entity-framework-6

我在我的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列?

2 个答案:

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

您还可以明确定义关系http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

最后,您还可以使用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; }