0

私は、さまざまな方法で関連付けられている複数のユニットエンティティを持つ従業員エンティティを持っています (たとえば、マネージャー、スーパーバイザーなどとして...)。Unit との関係は、EmployeeId、UnitId、および RelationshipTypeId 属性に加えて IsActive 属性を含む UnitRelationships テーブルで定義されます。

私がやりたいことは、Employee エンティティに特定のプロパティを作成することです。

SupervisedUnits {get;set;}
ManagedUnits{get;set;}

... そして、「SupervisedUnits」がアクティブな (IsActive = true) 関係が存在し、RelationshipTypeId='Supervisor' であるユニットのみを返すようにマッピングを構成します。ManagedUnits と同じタイプのもの。

それで、LINQ-to-Entities クエリでこれらのプロパティ (SupervisedUnits と ManagedUnits) を実際に使用できるように、EF Code First でこれを行う方法はありますか?

ありがとう

4

1 に答える 1

0

これを行うには、おそらくいくつかの方法があります。

  1. 「アクティブ」関係はユニットと従業員の間の 1 対多であり、「非アクティブ」関係は多対多です。したがって、それらを 2 つの異なる関係として設定し、関係が非アクティブになったら、 を に移動SupervisorInactiveSupervisorsます。このようにすると、SupervisedUnits(必要に応じて) ナビゲーション プロパティとプロパティInActiveSupervisedUnitsが得られます。

  2. 関係は多対多で、 、 、 などの属性が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;}

ユニットに到達するには、UnitRelationship を通過する必要があります

var SupervisedUnits = SupervisedRelations.Units;

于 2013-09-27T10:49:05.257 に答える