5

W wideo pluralsight z http://www.asp.net/mvc. Modelowy element obiektu został zmieniony na wirtualny w środku wideo. Nie podał szczegółowego opisu zmiany. Czy ktokolwiek mógłby wymyślić konieczność?Dlaczego członkowie obiektu domeny (POCO) są zdefiniowani jako wirtualne?

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

BTW, jest IDBContext w filmie następuje repozytorium wzór? Czy kod powinien używać wzorca repozytoriów dla najlepszej praktyki, jeśli tak nie jest?

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

Aktualizacja: Powinno być różne repozytorium wzorca. Zazwyczaj wzór repozytorium tworzy jedną klasę dla jednego obiektu modelu IRepository<T>. Ten umieścił cały obiekt modelu w jednym interfejsie Restaurants, . Jak ten jeden porównuje się z typowym?

+0

POCO nigdy nie powinien być obiektem domeny. W twoim przykładzie każda jednostka to model PERSISTENCE, a nie DOMAIN. A wzorzec repozytorium NIE tworzy jednej klasy dla jednego obiektu modelu. Zapewnia abstrakcję i działa jako fasada dla dostępu trwałego, w tym przypadku EF. – MikeSW

Odpowiedz

8

Podsumowując, aby POCO działał z EF, tworzy klasy proxy, które dziedziczą po oryginalnych klasach jednostek (POCO). A więc potrzebne są właściwości wirtualne, aby nadpisywać je, aby można było włączyć śledzenie zmian EF i pracę leniwej infrastruktury ładującej. W przeciwnym razie śledzenie zmian lub opóźnione ładowanie nie będzie domyślnie włączone.

Pełną odpowiedź na to może trzeba przeczytać Working with POCO Entities i Requirements for Creating POCO Proxies

2

Podczas korzystania z Entity Framework, właściwości muszą być wirtualne, aby wspierać leniwe ładowanie.

1

Z msdn article; "W przypadku śledzących zmian:

Każda właściwość odwzorowana na właściwość typu jednostki w modelu danych musi mieć niezablokowane (NotOverridable w języku Visual Basic), publiczne i wirtualne (Overridable w języku Visual Basic). i ustaw akcesoria. "

Powiązane problemy