EntityFrameWork 中POCO类 Virtual关键
2019-01-21 本文已影响2人
Angeladaddy
写EF,在定义模型类时,经常看到virtual
这个关键字:
public virtual string Title { get; set; }
public virtual School School { get; set; }
这个virtual有什么用呢?答案是:
- 如果virtual使用在scela标量字段(值类型)上,如上面的string,还有int,bool, float..., 一般是为了更好的更改追踪(change tracking)。
- 如果使用在导航属性上,如上面的School字段,一般是为了懒惰加载(lazy loading)。也就是说你不去显式指定的话,EF是不会主动加载此关联类的。
注意:要使用上面的特性,POCO类必须满足以下条件
- public
- no sealed
- no abstract
- 不继承 IEntityWithChangeTracker 或 IEntityWithRelationships- 没事一般不会去继承吧?
- 启用ProxyCreationEnabled - 默认已启用
注意,change tracking
时, 如果是one-to-many
的状况, 此属性必须用ICollection
定义:
public virtual ICollection<School> Schools { get; set; }