在 http://www.asp.net/mvc 的 pluralsight 视频中.模型对象成员在视频中间被更改为虚拟。他没有详细说明这一变化。任何人都可以详细说明必要性吗?
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; }
}
顺便说一句,是 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;
}
更新:应该是各种repository pattern。通常存储库模式为一个模型对象创建一个类 IRepository<T>
.这个将所有模型对象放在一个界面中 Restaurants
, Reviews
.这个与典型的相比如何?
最佳答案
总而言之,为了让 POCO 与 EF 一起工作,它创建了从您的原始实体类 (POCO) 继承的代理类。因此它需要属性是虚拟的以便覆盖它们,以便它可以插入 EF 更改跟踪和延迟加载基础结构工作。 否则默认情况下不会启用更改跟踪或延迟加载。
要获得完整答案,您可能需要阅读 Working with POCO Entities 和 Requirements for Creating POCO Proxies
关于c# - 为什么域对象(POCO)的成员定义为虚拟的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9937119/