EF5 と複雑なオブジェクトの状況があります。基本は、親から子への複雑なオブジェクトがあるということですが、子は親を複数回参照します。さまざまなオプションを試しましたが、質問に答える解決策が見つかりません。私が得た最も近いのはこの答えです(オプション2c)
私のモデルは以下のようになります:
public class StaffMember
{
public virtual Guid StafId { get; set; }
// other props
// List of leave apps (Approved/Cancelled etc)
public virtual ICollection<StaffLeaveApp> LeaveApps { get; set; }
}
//Staff Leave Application
public class StaffLeaveApp
{
public virtual Guid LeaveId { get; set; }
public virtual Guid StaffId { get; set; }
// other props...
// Leave approved by? (2 approvals required)
public virtual StaffMember ApprovedBy1 { get; set; }
public virtual StaffMember ApprovedBy2 { get; set; }
}
私のマッピングは次のようになります
public class StaffMap : EntityTypeConfiguration<StaffMember>
{
public StaffMap()
{
ToTable("tblStaffMembers");
HasKey(x => x.StaffId);
// other mappings...
HasMany(x => x.LeaveApps);
}
}
public class StaffLeaveAppMap: EntityTypeConfiguration<StaffLeaveApp>
{
public StaffLeaveAppMap()
{
ToTable("tblStaffMembersLeaveApps");
HasKey(x => x.LeaveId);
Property(x => x.StaffId).HasColumnName("StaffID");
//Child Relationships
HasOptional(x => x.ApprovedBy1).WithMany().Map(m => m.MapKey("LeaveApprovedBy1"));
HasOptional(x => x.ApprovedBy2).WithMany().Map(m => m.MapKey("LeaveApprovedBy2"));
}
}
テーブル (申し訳ありませんが、画像はありません)
StaffID uniqueidentifier (FK - tblStaffMembers)
LeaveID uniqueidentifier (PK)
LeaveApprovedBy1 uniqueidentifier (FK - tblStaffMembers)
LeaveApprovedBy2 uniqueidentifier (FK - tblStaffMembers)
ビジネス ルールは次のように述べています。スタッフ メンバーは「多数の」休暇申請を持ち、休暇申請は 1 人のスタッフ メンバーに属します。各申請は、「承認」される前に 2 人のスタッフ (マネージャー) の承認が必要です。
EF を使用して上記をどのようにマッピングすれば、1 人のスタッフ メンバーが「多数の」休暇申請を持ち (既に作業中)、休暇申請が最初の承認のためにそれを承認したスタッフ メンバーにマップされ、次に 2 番目の承認のために再びマップされるようになります。 . 「ApprovedBy1」のみに1つのマッピングを使用すると、EFは満足し、すべてが期待どおりに機能します。2 番目の承認マッピングを追加した瞬間、EF はそれが生成する SQL クエリと格闘します。
レベル 1 で誰がアプリケーションを承認し、誰がレベル 2 でアプリケーションを承認したかを指定するために、EF を StaffMembers テーブルにマップし直すように指示する方法がわかりません。ほとんどの場合、多対多の関係になります。
何か案は?