为什么域对象(PO​​CO)的成员是虚拟的?

ca9*_*3d9 5 c# domain-driven-design entity-framework repository-pattern

http://www.asp.net/mvc的复数视频中.模型对象成员在视频中间更改为虚拟.他没有详细描述这一变化.任何人都可以详细阐述必要性吗?

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; }
}
Run Code Online (Sandbox Code Playgroud)

BTW,是IDBContext在视频中遵循存储库模式吗?如果不是,代码是否应该使用存储库模式进行最佳实践?

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;
}
Run Code Online (Sandbox Code Playgroud)

更新:它应该是各种存储库模式.通常,存储库模式为一个模型对象创建一个类IRepository<T>.这个将所有模型对象放在一个界面RestaurantsReviews.这个与典型的相比如何?

Muh*_*man 9

总而言之,为了使POCO与EF一起工作,它创建了从原始实体类(POCO)继承的代理类.所以它需要的属性是虚拟的,以覆盖它们,以便它可以插入EF更改跟踪和懒加载基础性工作.否则,默认情况下不会启用更改跟踪或延迟加载.

要获得完整的答案,您可能需要阅读使用POCO实体创建POCO代理的要求