c# - 为什么域对象(PO​​CO)的成员定义为虚拟的?

标签 c# entity-framework domain-driven-design repository-pattern

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 EntitiesRequirements for Creating POCO Proxies

关于c# - 为什么域对象(PO​​CO)的成员定义为虚拟的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9937119/

相关文章:

entity-framework - 在 Entity Framework 中使用 lambda 语法进行多个左连接

c# - Entity Framework 在嵌套实体上使用 Where 子句

java - 同时为整体和微服务设计java项目

java - 如何用spring正确发布DDD领域事件?

c# - 从 C# 调用非托管 (C++) 函数时出现 PInvoke 错误

c# - 关闭时淡出 wpf 窗口

javascript - 如何使用jQuery来显示HtmlTableRow(开始隐藏/隐藏生命)?

c# - 特定域的 DNS 解析失败。域与 nslookup 一起使用

sql-server - 在 MSSQL 中检索 varbinary 值作为 BASE64

domain-driven-design - DDD(域驱动设计)-大型集合