我有EF5和複雜對象的情況。基礎知識是,我有一個父子複合對象,但孩子多次引用父對象。我嘗試了各種選擇,但沒有找到解決方案來回答問題。我已經得到的最接近是this answer(選項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)
業務規則說:一名工作人員有「許多」離開申請和離開一個應用屬於單一職員。每個申請需要2名工作人員(經理)批准後才能獲得批准。
如何使用EF映射上述內容,以便單個工作人員具有「許多」請假申請(已在工作),並且將請假申請映射回批准其進行首次批准的工作人員,然後再次爲了獲得批准。如果我使用「ApprovedBy1」的一個映射,那麼EF很高興並且所有工作都按預期工作。當我添加第二批准映射EF時,它就會與它生成的SQL查詢一起掙扎。
我不確定如何告知EF映射回StaffMembers表,以指定哪些人在第1級批准了應用程序並在第2級批准了它。它幾乎最終成爲多對多關係。
任何想法?
感謝您的回覆。我已經嘗試過,但問題依然存在,最初的映射(ApprovedBy1)指向申請請假的實際工作人員。他們不能批准他們自己的。 – QuentinInSA
本質上有3名工作人員在這裏參與:1)實際請假人員[職員表(父) - 領域:職員ID =離職表(子) - 領域:職員ID] 2)批准休假的第一個「經理」離開表格(父) - 字段:ApprovedBy1 =員工表(子) - 字段:職員ID],3)第二個經理批准離職[離開表格(父) - 字段:ApprovedBy2 =員工表格(子) - 字段: ] – QuentinInSA
我不確定您是在描述業務邏輯還是映射問題。也許你應該把它添加到你的問題中,以使其更清楚。 –