Sto cercando di determinare cosa EF6 mi sta dicendo, e non ha molto senso per me, quindi spero che qualcuno qui possa chiarirlo.
Sto configurando il mio FluentApi in questo modo (chiavi composite in uso nel DB, questo è Code First dal Database):
modelBuilder.Entity<Object1>()
.HasKey(e => new { e.Property1, e.Property2 }
.HasMany(e => e.Object2s)
.WithRequired(e => e.Object1)
.HasForeignKey(e => new { e.Property1, e.Property2 });
modelBuilder.Entity<Object2>()
.HasKey(e => new { e.Property2, e.Property3, e.Property1 })
.HasRequired(e => e.Object1)
.WithMany(e => e.Object2s)
.HasForeignKey(e => new { e.Property1, e.Property2 });
Tutto funziona bene, ma quando vado a selezionare qualcosa, ottengo questo:
"Vincolo chiave esterna 'Object1_Object2' dalla tabella Oggetto2 (Proprietà2, Proprietà1) alla tabella Oggetto1 (Proprietà1, Proprietà2) :: Mappatura insufficiente: la chiave esterna deve essere mappata su alcuni AssociationSet o EntitySet che partecipano a un'associazione di chiavi esterne sul lato concettuale."
Idee? Non capisco perché il vincolo FK mostri l'FK di Object2 nell'ordine errato, quando ho definito l'ordine corretto in FluentApi.
Questo è in definitiva ciò che dovevo fare: impostare l'attributo Chiave esterna e specificare l'ordine della colonna. Il codice prima di DB aveva ordine = 2 e ordine = 0 invertiti, quindi l'ho modificato in:
public partial class Object2
{
[Key]
[Column("Property2", Order=2)]
[ForeignKey("Object1")]
public short Property2 { get; set; }
[Key]
[Column("Property3", Order=1)]
public short Property3 { get; set; }
[Key]
[Column("Property1", Order=0)]
[ForeignKey("Object1")]
public int Property1 { get; set; }
}
Ho rimosso FluentApi da Object1 e Object2 relativi a questa disposizione di chiavi esterne e tutto appare bene. Lo rifarò in FluentApi non appena stabilirò come impostare l'ordine delle colonne in FluentApi.
Poi devo aggiungere questo al mio file T4 per questo oggetto ... l'obiettivo finale è quello di essere in grado di rigenerare il DB in Code First in qualsiasi momento senza problemi :) Grazie per l'aiuto, tutto!