Ho pensato che potrebbe essere utile ottenere una risposta definitiva su quando utilizzare WithOptionalDependent
e quando utilizzare WithOptionalPrincipal
. L'aiuto per le due funzioni è un po 'poco chiaro, e mi trovo a scavare attraverso più risposte Stack Overflow e risposte su altri siti che combinano le risposte al fine di sentirsi sicuri di avere la relazione andando nella giusta direzione.WithOptionalDependent vs WithOptionalPrinciple - Risposta definitiva?
Ecco cosa dice MSDN su WithOptionalDependent
:
di configurare il rapporto di essere facoltativa: facoltativa, senza una proprietà di navigazione sul lato opposto della relazione. Il tipo di entità in fase di configurazione sarà dipendente e contiene una chiave esterna nell'entità. Il tipo di entità che gli obiettivi della relazione saranno il principale nella relazione.
e qui è quello che dice di WithOptionalPrincipal
:
di configurare il rapporto di essere facoltativa: facoltativa, senza una proprietà di navigazione sul lato opposto della relazione. Il tipo di entità in fase di configurazione sarà il principale nella relazione. Il tipo di entità che i target di relazione saranno dipendenti e contiene una chiave esterna per l'entità.
La riga "Il tipo di entità in fase di configurazione" è la parte che mi confonde sempre (e ne assumo altri).
In questo esempio:
class MyEntityA
{
[Key]
public int Id { get; set; }
public int BId { get; set; }
[ForeignKey("BId")]
public MyEntityB B { get; set; }
}
class MyEntityB
{
[Key]
public int Id { get; set; }
}
modelBuilder.Entity<MyEntityA>().HasOptional(a => a.B).WithOptionalDependent();
è "il tipo di entità essendo configurato" riferendosi MyEntityA
o MyEntityB
? Presumo che sia il primo.
Se è corretto, quale è un esempio di quando si utilizza WithOptionalPrincipal
?
In realtà penso nel mio esempio di codice che dovrebbe essere in realtà WithMany
e nessuna delle opzioni WithOptional. Chiaramente sono ancora confuso!
Ci sono sovraccarichi per entrambe queste funzioni che portano la proprietà di navigazione nell'altra direzione. Presumo che questi sovraccarichi non cambino quelle risposte, ma per favore correggimi se sbaglio.
Spero che questo sia utile anche per la comunità più grande.