5

Nel video pluralsight di http://www.asp.net/mvc. Il membro dell'oggetto modello è stato modificato in virtuale nel mezzo di un video. Non ha fornito una descrizione dettagliata del cambiamento. Qualcuno potrebbe elaborare la necessità?Perché i membri dell'oggetto dominio (POCO) sono definiti virtuali?

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

proposito, è il IDBContext nel video segue Pattern Repository? Il codice dovrebbe utilizzare il modello di repository per la migliore pratica se non lo è?

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

Aggiornamento: Dovrebbe essere una varietà di Pattern Repository. Generalmente il pattern di repository crea una classe per un oggetto modello IRepository<T>. Questo ha messo tutto l'oggetto del modello in un'interfaccia Restaurants, Reviews. Come questo è paragonabile a quello tipico?

+0

Un POCO non deve mai essere un oggetto dominio. Nel tuo esempio, ogni entità è un modello PERSISTENCE, non DOMAIN. E il modello di repository NON crea una classe per un oggetto modello. Fornisce un'astrazione e funge da facciata per l'accesso alla persistenza, in questo caso l'EF orm. – MikeSW

risposta

8

Per riepilogare questo, per ottenere POCO funziona con EF, crea classi proxy che ereditano dalle classi di entità originali (POCO). E quindi ha bisogno che le proprietà siano virtuali per poterle sovrascrivere in modo da poter collegare il rilevamento delle modifiche EF e il lavoro di infrastruttura di caricamento lazy. In caso contrario, il rilevamento delle modifiche o il caricamento lazy sarebbero abilitati per impostazione predefinita.

Per risposta completa a questo si potrebbe aver bisogno di leggere Working with POCO Entities e Requirements for Creating POCO Proxies

2

Quando si utilizza Entity Framework, proprietà deve essere virtuale per supportare il caricamento lazy.

1

Dal msdn article; "Per il rilevamento delle modifiche proxy:

Ogni proprietà che viene mappato a una proprietà di un tipo di entità nel modello dei dati deve avere non sigillati (NotOverridable in Visual Basic), pubblico, e virtuale (Overridable in Visual Basic) ottenere e impostare gli accessor. "

Problemi correlati