我有以下4个表格(此问题已简化):
CompanyId |名称
EmpoyeeId | CompanyId | FirstName |名字
PermissionId | CompanyId |许可
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集合。
答案 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