我使用實體框架代碼優先自動創建我的數據庫架構,和我的實體的一個看起來是這樣的:爲什麼EF代碼首先生成一個無關的外鍵列?
public class AssessmentsCaseStudies {
#region Persisted fields
[Required]
[Key, Column(Order=0)]
[ForeignKey("Assessment")]
public int AssessmentId { get; set; }
[Required]
[Key, Column(Order=1)]
[ForeignKey("CaseStudy")]
public int CaseStudyId { get; set; }
[Required]
public int Score { get; set; }
[ForeignKey("Follows")]
public int? FollowsCaseStudyId { get; set; }
#endregion
#region Navigation properties
public virtual Assessment Assessment { get; set; }
public virtual CaseStudy CaseStudy { get; set; }
public virtual CaseStudy Follows { get; set; }
#endregion
}
當EF自動生成我的數據庫,它會生成與下列的表:
AssessmentId (PK, FK, int, not null)
CaseStudyId (PK, FK, int, not null)
Score (int, not null)
FollowsCaseStudyId (FK, int, null)
CaseStudy_CaseStudyId (FK, int, null)
除了CaseStudy_CaseStudyId
列之外,這一切都很好。爲什麼產生了?它是爲了什麼?我怎樣才能阻止它被生成?我懷疑EF不能再自動匹配CaseStudy
的ICollection<AssessmentsCaseStudies>
與CaseStudyId
列,因此它會創建自己的列以將這兩者鏈接在一起以獲取該導航屬性。
我真的不明白這個問題的接受答案。我在'AssessmentsCaseStudies'中有兩個'CaseStudy'參考,所以我沒有真正的多對多關係,我不明白爲什麼我需要一個聯結表。我確實有'public virtual ICollection AssessmentsCaseStudies {get;組; }'''CaseStudy'中,所以我想要說一說ICollection應該與'CaseStudyId' FK相關,而不是'FollowsCaseStudyId' FK。 –
Jez
好的,我認爲它可能包含有用的信息。你可以嘗試創建一個精簡的例子,例如只有一個'Assessment','CaseStudy'和'AssesmentCaseStudy'實體,每個實體只包含一個'ID'字段和'AssesmentCaseStudy'包含一個'AssesmentID'和一個'CaseStudyID '領域?問題是否仍然存在? – CodeCaster
我不認爲這個問題應該被關閉,因爲接受的「重複」問題的答案沒有解釋得很好,我想要一個更好的答案。請投票重新開放。 – Jez