繁体   English   中英

为什么Entity Framework不生成代理?

[英]Why is Entity Framework not generating proxy?

我有一个DbContextProxyCreationEnabled设置为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM