Ramificazioni di DbSet.Create contro new Entity ()

Sono un po ‘confuso sull’opportunità di utilizzare DbSet.Create o semplicemente di aggiungere un’ quadro e aggiungerla. Non capisco le conseguenze dell’utilizzo di DbSet.Create.

Capisco che DbSet.Create creerà una versione proxy se applicabile, ma non capisco cosa significhi. Perché mi importa? Mi sembra che una class Proxied vuota non sia più utile di una class non proxy, dal momento che non ci sono quadro correlate a carico pigro.

Puoi dirmi la differenza, oltre l’ovvio? E perché ti importa?

Uno scenario in cui l’utilizzo di DbSet.Create() ha senso colbind un’ quadro esistente al contesto e quindi sfruttare il carico lazy delle quadro correlate. Esempio:

 public class Parent { public int Id { get; set; } public virtual ICollection Children { get; set; } } public class Child { public int Id { get; set; } public string Name { get; set; } } 

Quello che segue funzionerebbe allora:

 using (var context = new MyDbContext()) { var parent = context.Parents.Create(); parent.Id = 1; // assuming it exists in the DB context.Parents.Attach(parent); foreach (var child in parent.Children) { var name = child.Name; // ... } } 

Qui viene triggersto il caricamento lazy dei bambini (forse con una raccolta vuota risultante, ma non null ). Se si sostituisce context.Parents.Create() dal new Parent() il ciclo foreach si parent.Children perché parent.Children è sempre null .

modificare

Un altro esempio era qui (popolando una proprietà di chiave esterna di una nuova entity framework e quindi caricando pigramente la proprietà di navigazione dopo che la nuova quadro è stata inserita nel DB): Proprietà di caricamento lenta dopo un inserimento