entity-framework entity-framework-4.1

entity framework - Ramificaciones de DbSet.Create versus new Entity()



entity-framework entity-framework-4.1 (1)

Estoy un poco confundido acerca de si usar DbSet.Create, o simplemente actualizar una entidad y agregarla. Realmente no entiendo las ramificaciones de usar DbSet.Create.

Entiendo que DbSet.Create creará una versión de proxy si corresponde, pero realmente no entiendo lo que eso significa. ¿Porqué me importa? Me parece que una clase Proxied vacía no es más útil que una clase no proxy, ya que no hay entidades relacionadas con la carga lenta.

¿Puedes decirme la diferencia, más allá de lo obvio? ¿Y por qué te importaría?


Un escenario donde usar DbSet<T>.Create() tiene sentido es asociar una entidad existente al contexto y luego aprovechar la carga diferida de las entidades relacionadas. Ejemplo:

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

Lo siguiente funcionaría entonces:

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; // ... } }

Aquí se activa la carga diferida de los niños (tal vez con la colección vacía resultante, pero no null ). Si reemplaza context.Parents.Create() por el new Parent() el bucle foreach se bloqueará porque parent.Children siempre es null .

Editar

Otro ejemplo fue aquí (rellenar una propiedad de clave externa de una entidad nueva y luego cargar la propiedad de navegación de forma perezosa después de insertar la nueva entidad en la base de datos): propiedades de carga diferida después de una inserción