Entity Framework 6 代表ID或枚举值建立关系
Entity Framework 6 Make relation on behalf of ID or enum value
在我的数据库中,一些表之间存在依赖于 ID 或枚举值的关系。这是结构:
员工
- ID
- 姓名
- RoleEnum(首席执行官、领导者、开发人员)
- 虚拟优势列表
优势
- ID
- 描述
员工优势
- ID
- 优势ID
- 员工 ID(可为空)*
- 角色枚举(可为空)*
*) 每行只有一个值
Employee 和 Advantages 之间的关系可以基于基于 EmployeeID 和 AdvantagesID 的直接关系,也可以基于 RoleEnum。
因此,当我使用 EF 加载员工时,我希望自动填充虚拟优势列表,并且当关系基于 EmployeeID 和 AdvantagesID 时,此行为也有效,但当它基于RoleEnum 当然不是开箱即用的,但是否可以配置 EF 来处理这种情况?因此,如果员工具有 "CEO" 的角色,它将加载所有基于该角色的关系 in EmployeeAdvantages?
据我所知,你想要的是不可能的。但是您可以为 Employee 创建一个扩展,您可以在其中手动加载通过 RoleEnum 获得的 EmployeeAdvantages。基本上你会在你的扩展方法中这样做:
public static class EmployeeExtension
{
public static int VirtualListOfAdvantages(this Employee employee)
{
var repo = new EmployeeAdvantagesRepository();
var enumRoleAdvantages =
repo.GetAll().Where(ea => ea.RoleEnum == employee.RoleEnum).ToList();
enumRoleAdvantages.AddRange(employee.VirtualListOfAdvantages);
return enumRoleAdvantages;
}
}
(我不知道你的存储库会是什么样子,但我想你明白了)
这当然不是您正在寻找的解决方案,但它是一个有效且非常简单的解决方案,应该运行良好。
有关扩展方法的更多信息(以及示例取自:How to: Implement and Call a Custom Extension Method
从关系建模的角度来看,最好将 Employee
中的 Advantage
与 Role
中的 Advantage
分开。
最好有单独的table像RoleAdvantages
通过这种方式,您可以根据员工的角色在 Employee
和 RoleAdvantage
之间建立关系,从而自动加载 Role
的 Advantages
。然后您才需要从两个集合中收集 Advantage
。
在我的数据库中,一些表之间存在依赖于 ID 或枚举值的关系。这是结构:
员工
- ID
- 姓名
- RoleEnum(首席执行官、领导者、开发人员)
- 虚拟优势列表
优势
- ID
- 描述
员工优势
- ID
- 优势ID
- 员工 ID(可为空)*
- 角色枚举(可为空)*
*) 每行只有一个值
Employee 和 Advantages 之间的关系可以基于基于 EmployeeID 和 AdvantagesID 的直接关系,也可以基于 RoleEnum。
因此,当我使用 EF 加载员工时,我希望自动填充虚拟优势列表,并且当关系基于 EmployeeID 和 AdvantagesID 时,此行为也有效,但当它基于RoleEnum 当然不是开箱即用的,但是否可以配置 EF 来处理这种情况?因此,如果员工具有 "CEO" 的角色,它将加载所有基于该角色的关系 in EmployeeAdvantages?
据我所知,你想要的是不可能的。但是您可以为 Employee 创建一个扩展,您可以在其中手动加载通过 RoleEnum 获得的 EmployeeAdvantages。基本上你会在你的扩展方法中这样做:
public static class EmployeeExtension
{
public static int VirtualListOfAdvantages(this Employee employee)
{
var repo = new EmployeeAdvantagesRepository();
var enumRoleAdvantages =
repo.GetAll().Where(ea => ea.RoleEnum == employee.RoleEnum).ToList();
enumRoleAdvantages.AddRange(employee.VirtualListOfAdvantages);
return enumRoleAdvantages;
}
}
(我不知道你的存储库会是什么样子,但我想你明白了)
这当然不是您正在寻找的解决方案,但它是一个有效且非常简单的解决方案,应该运行良好。
有关扩展方法的更多信息(以及示例取自:How to: Implement and Call a Custom Extension Method
从关系建模的角度来看,最好将 Employee
中的 Advantage
与 Role
中的 Advantage
分开。
最好有单独的table像RoleAdvantages
通过这种方式,您可以根据员工的角色在 Employee
和 RoleAdvantage
之间建立关系,从而自动加载 Role
的 Advantages
。然后您才需要从两个集合中收集 Advantage
。