5

En el video de pluralsight de http://www.asp.net/mvc. El miembro del objeto modelo se cambió a virtual en el medio de un video. No dio una descripción detallada del cambio. ¿Podría alguien elaborar la necesidad?¿Por qué los miembros del objeto de dominio (POCO) se definen como virtuales?

public class Restaurant 
{ 
    public virtual int ID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Address Address { get; set; } 
    public virtual ICollection<Review> Reviews { get; set; } 
} 

Por cierto, es el IDBContext en el vídeo siguiente patrón de repositorio? ¿Debería el código usar un patrón de repositorio para las mejores prácticas si no es así?

public interface IDbContext 
{ 
    IQueryable<Restaurant> Restaurants { get; } 
    IQueryable<Review> Reviews { get; } 
    int SaveChanges(); 
    T Attach<T>(T entity) where T : class; 
    T Add<T>(T entity) where T : class; 
    T Delete<T>(T entity) where T : class; 
} 

Actualización: Debe ser una variedad de patrón de repositorio. Por lo general, el patrón de repositorio crea una clase para un objeto modelo IRepository<T>. Este puso todo el objeto modelo en una interfaz Restaurants, Reviews. ¿Cómo se compara este con el típico?

+0

Un POCO nunca debe ser un objeto de dominio. En su ejemplo, cada entidad es un modelo de PERSISTENCIA, no DOMINIO. Y el patrón de repositorio NO crea una clase para un objeto modelo. Proporciona una abstracción y actúa como una fachada para el acceso de persistencia, en este caso el EF orm. – MikeSW

Respuesta

8

Para resumir esto, para que POCO funcione con EF, crea clases proxy que heredan de las clases de entidades originales (POCO). Por lo tanto, necesita que las propiedades sean virtuales para anularlas, de modo que pueda conectar el seguimiento de cambios de EF y el trabajo de infraestructura de carga diferida. De lo contrario, no se habilitará el seguimiento de cambios o la carga diferida de forma predeterminada.

Por toda respuesta completa a esta puede que tenga que leer Working with POCO Entities y Requirements for Creating POCO Proxies

2

Al usar Entity Framework, las propiedades deben ser virtuales para admitir la carga diferida.

1

Desde el msdn article; "Para proxies de seguimiento de cambios:

Cada propiedad que se asigna a una propiedad de un tipo de entidad en el modelo de datos debe tener no sellada (NotOverridable en Visual Basic), pública y virtual (Anulable en Visual Basic) obtener y establecer accesos ".

Cuestiones relacionadas