我有一个Employee实体,它有多个Unit实体,它们也以各种方式关联(例如,作为经理,主管等......)。它们与Unit的关系在UnitRelationships表中定义,该表包括除EmployeeId,UnitId和RelationshipTypeId属性之外的IsActive属性。
我想要做的是在Employee实体上创建特定的属性:
SupervisedUnits {get;set;}
ManagedUnits{get;set;}
...并配置映射,以便“SupervisedUnits”仅返回存在活动(IsActive = true)关系且RelationshipTypeId ='Supervisor'的单位。与ManagedUnits相同的类型。
那么,有没有办法在EF Code First中执行此操作,以便我可以在LINQ-to-Entities查询中实际使用这些属性(SupervisedUnits和ManagedUnits)?
由于
答案 0 :(得分:0)
可能有几种方法可以做到这一点。
“活跃”关系是单位与员工之间的一对多关系,“非活动”关系是多对多关系。因此,将它们设置为两种不同的关系,当关系处于非活动状态时,将Supervisor
移至InactiveSupervisors
。这样做可以为您提供SupervisedUnits
导航属性(如您所愿)和InActiveSupervisedUnits
属性
该关系是多对多关系,具有IsActive
,ActiveFrom
和ActiveTo
等属性。现在这种关系确实需要成为一个实体。您可以在UnitRelationship实体上使用继承:
public class SupervisorUnitRelationShip : UnitRelationship{ }
public class ManagerUnitRelationShip : UnitRelationship
{
}
然后您可以按类型添加导航属性:
public virtual Collection<SupervisorUnitRelationship> SupervisedRelations {get;set;}
public virtual Collection<ManagerUnitRelationship> ManagedRelations {get;set;}
进入单位你必须通过单位关系
var SupervisedUnits = SupervisedRelations.Units;