Sto utilizzando Entity Framework in codice prima di creare automaticamente il mio schema del database, e uno dei miei soggetti si presenta così:Perché il codice EF genera prima una colonna chiave esterna estranea?
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
}
Quando EF genera automaticamente il mio database, si genera una tabella con le seguenti colonne :
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)
Questo va bene a parte la colonna CaseStudy_CaseStudyId
. Perché è stato generato? Cosa serve? Come posso smettere di essere generato? Il mio sospetto è che EF non possa più abbinare automaticamente lo CaseStudy
allo ICollection<AssessmentsCaseStudies>
con la colonna CaseStudyId
, quindi crea una propria colonna per collegare i due insieme per quella proprietà di navigazione.
Non capisco davvero la risposta accettata a questa domanda. Ho esattamente due riferimenti 'CaseStudy' in 'AssessmentsCaseStudies', quindi non ho una vera relazione molti-a-molti e non vedo perché ho bisogno di una tabella di giunzione. Ho 'public virtual ICollection AssessmentsCaseStudies {get; impostato; } 'in' CaseStudy', però, quindi voglio un modo per dire che ICollection dovrebbe riguardare l'FK 'CaseStudyId', non l'FK 'FollowsCaseStudyId'. –
Jez
ok, ho pensato che potesse contenere informazioni utili. Puoi provare a creare un esempio ridotto, ad esempio con solo un'entità 'Assessment',' CaseStudy' e 'AssesmentCaseStudy', ognuno contenente solo un campo' ID' e 'AssesmentCaseStudy' contenenti un' AssesmentID' e un 'CaseStudyID 'campo? Il problema si verifica ancora? – CodeCaster
Non penso che questa domanda avrebbe dovuto essere chiusa perché la risposta accettata alla domanda "dupe" non spiega bene le cose e mi piacerebbe una risposta migliore. Si prega di votare per riaprire. – Jez