[英]Why is Entity Framework not generating proxy?
我有一个DbContext
, ProxyCreationEnabled
设置为true(实际上它是默认值)。
据我所知,这使EF能够从数据库加载代理实体,因此我们对属性所做的任何更改都会被更改跟踪器识别,我们可以像这样调用SaveChanges()
:
using (var db = new MyDbContext())
{
var people = db.People.Where(p => p.Status = PersonStatus.New).ToList();
foreach (var person in people)
{
person.Name = "Something";
}
db.SaveChanges();
}
问题是:即使ProxyCreationEnabled
为true,为什么EF不会将代理用于特定的类? 该类没有密封,因此它应该能够使用代理。
这是我的示例类:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime RegisterDate { get; set; }
public PersonStatus Status { get; set; }
}
要为属性生成代理,它应该是虚拟的
public class Person
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual DateTime RegisterDate { get; set; }
public virtual PersonStatus Status { get; set; }
}
要获得更改跟踪代理,基本规则是您的类必须是公共的,非抽象的或非密封的。 您的类还必须为持久化的所有属性实现公共虚拟getter / setter。 最后,您必须仅将基于集合的关系导航属性声明为
ICollection<T>
。 它们不能是具体实现或从ICollection<T>
派生的其他接口(与延迟加载代理的区别)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.