首页 文章

对于Entity Framework CodeFirst 4.1,将Simple Entity Property标记为虚拟是否有任何好处

提问于
浏览
1

我知道我可以使用virtual关键字告诉实体框架子表应该以LAZY方式加载 . 如,

public class Person
{
    public virtual string Name { get; set; }
    public virtual int Age { get; set; }
    public virtual History PastHistory { get; set; }
    public virtual ICollection<Blog> Blogs { get;set; }   
}

public class Blog
{
   ..... blah.. blah.... blah
}

public class History
{
   .... blah blah blah
}

现在,我的问题,

  • 由于历史不是集合,而是另一个实体的1:1映射,如果我想加载历史懒惰的方式,我应该将历史记录标记为虚拟吗?

  • 将简单属性(即Name:string,Age:int)标记为虚拟有什么好处?此时,我将所有简单属性标记为虚拟,没有明显的原因 . 如果有人确认我将简单属性标记为虚拟在EF Code First中根本没有任何影响,我将删除标记以使我的POCO更清晰 .

谢谢 .

1 回答

  • 4
    • 如果历史记录仍然是相关实体(来自另一个表的记录),则还必须将其标记为虚拟以启用延迟加载 . 更重要的是,如果要对博客使用延迟加载,实体中的所有其他导航属性也必须是虚拟的 .

    • 将所有简单属性标记为虚拟将允许EF使用动态更改跟踪 .

    延迟加载和更改跟踪都是由动态代理执行的 - 一种在运行时创建并从您的实体类型派生的类型 . 虚拟关键字是必要的,以允许此派生类型将属性代码覆盖(换行)为执行导航属性的延迟加载或通知EF上下文有关简单属性更改的新代码 .

相关问题