2013-03-06 14 views
24

Ciao sto solo imparando a lavorare con Entity Framework Codice primo e io non riesco a capire something.I aver creato tre modelli basati su un tutorial:codice intesa prime proprietà virtuali

public class Course 
{ 
    public int CourseID { get; set; } 
    public string Title { get; set; } 
    public int Credits { get; set; } 
    public virtual ICollection<Enrollment> Enrollments{ get; set; } 
} 

public class Enrollment 
{ 
    public int EnrollmentID { get; set; } 
    public int CourseID { get; set; } 
    public int StudentID { get; set; } 
    public decimal? Grade { get; set; } 
    public virtual Course Course { get; set; } 
    public virtual Student Student { get; set; } 
} 
public class Student 
{ 
    public int StudentID { get; set; } 
    public string LastName { get; set; } 
    public string FirstMidName { get; set; } 
    public DateTime EnrollmentDate { get; set; } 
    public virtual ICollection<Enrollment> Enrollments { get; set; } 
} 

Il mio problema è che Non capisco cosa fanno le proprietà con virtual.If controllo il database non ci sono casse di colonne per ognuna delle proprietà, solo per le altre.

Quindi cosa succede quando si crea una proprietà con la parola chiave virtuale?

risposta

31

Viene usato per gestire caricamento pigro e rilevamento delle modifiche.

EF genererà tipi di proxy in fase di esecuzione, che sono generati in modo dinamico i tipi che ereditano dalle classi POCO e aggiungere tutte le cose EF per gestire il monitoraggio nei proprietà virtuali override caricamento pigro/cambio.

Quindi virtual non è una "parola chiave magica" qui, virtual è qui così i tuoi POCO possono essere ereditati con ulteriore codice relativo a EF in fase di esecuzione.

3

Quando si crea una proprietà o un metodo contrassegnato con la parola chiave virtuale, sarà possibile sovrascriverlo in una classe derivata, offrendo così al metodo un comportamento più specializzato a seconda degli oggetti creati.

Nel caso di Entity Framework è anche una convenzione che indica che viene utilizzato il comportamento di caricamento lento. Una domanda per quanto riguarda questa materia esiste qui: Entity Framework 4.1 Virtual Properties

+2

C'è molto di più quando si lavora con Entity Framework. Ad esempio, è necessario il meccanismo di caricamento lazy di Entity Framework. Vedi: http://stackoverflow.com/questions/7738722/entity-framework-4-1-virtual-properties –

+0

@Ravadre Grazie, aggiornato il mio post. – Freeman

5

proprietà virtuali sono lì per consentire lazy loading