Ho difficoltà a trovare la risposta esatta a questa domanda, quindi mi scuso se questo è ridondante.
Quindi ho definito 3 tabelle in modo che:
Persona: PersonId, FirstName, LastName
Azienda: CompanyId, CompanyName
Ordine: OrderId, PersonId, CompanyId
Nella tabella Ordine è presente una chiave esterna definita sulle colonne PersonId e CompanyId, pertanto, la mia classe di entità Ordine generata da EF ha proprietà di navigazione di tipo Persona (non PersonId) e Società.
Quindi, per inserire nella tabella Ordine, ho prima bisogno di interrogare la persona e le tabelle aziendali per ottenere le entità persona e società. Quindi posso costruire l'oggetto Ordine utilizzando le entità Persona e Società e salvarlo nel db.
Nel mio scenario, mi viene passato un PersonId e CompanyId.
In SQL classico vorrei semplicemente inserire INSERT IN Order Set (CompanyId, PersonId) - 1 chiamata al database. Ma con EF, devo fare 3 chiamate db. Questo sembra eccessivo.
C'è un modo per aggirare questo?
PS - Sto usando EF 6. So che potrei generare un'espressione e renderla single call..but che produrrebbe comunque due subselect.
Puoi solo includere le proprietà delle chiavi esterne oltre alle proprietà di navigazione e quindi impostarle utilizzando gli ID che hai. Se lo fai, non dovrai andare al database per ottenere entità correlate solo per l'impostazione della relazione.