实体框架4.1 POCO - 多对多加载

时间:2011-11-10 05:05:54

标签: c# entity-framework many-to-many poco

我有以下4个表格(此问题已简化):


公司

CompanyId |名称

员工

EmpoyeeId | CompanyId | FirstName |名字

权限

PermissionId | CompanyId |许可

EmployeePermission

EmployeePermissionId | PermissionId | EMPLOYEEID


POCO如下:

[Table("Employee")]
public class Employee
{
    public int EmployeeId { get; set; }
    public int CompanyId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Company Company { get; set; }
    public List<Permission> Permissions { get; set; }
}

我希望能够将公司和权限加载为Employee的属性。我可以使用以下代码加载公司:

var employee = _context.Employees
            .Where(u => u.EmpoyeeId == 1234)
            .Include(u => u.Company)
            .FirstOrDefault();

不知道如何加载Permission集合。

2 个答案:

答案 0 :(得分:5)

您需要对数据库结构进行更改才能实现这一目标。

您的EmployeePermission表应该只包含2个外键列。通过这样做,EF将透明地管理链接表,您可以在Permissions类中拥有Employee属性。

更改Employee类定义以使导航属性成为虚拟。

[Table("Employee")]
public class Employee
{
    public int EmployeeId { get; set; }
    public int CompanyId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual Company Company { get; set; }
    public virtual ICollection<Permission> Permissions { get; set; }
}

然后您可以急切加载Permissions

var employee = _context.Employees
            .Where(u => u.EmpoyeeId == 1234)
            .Include(u => u.Company).Include(u => u.Permissions)
            .FirstOrDefault();

答案 1 :(得分:0)

多对多的关系

public class Employee
{

 public int EmployeeId { get; set; }

    public int CompanyId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual Company Company { get; set; }
    public virtual ICollection<Permission> Permissions { get; set; }
}

public class  Permission {

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

使用Employee_Id和Permission_Id

创建一个新表EmployeePermission
相关问题