我有一个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
,EF也不会对特定类使用代理?该类没有被密封,因此应该能够使用代理。
以下是我的示例类:public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime RegisterDate { get; set; }
public PersonStatus Status { get; set; }
}
First()
或ToList()
会返回类而不是代理。 - Alisson Reinaldo SilvaDbContext
在内部“跟踪”实体实例,包括原始值和当前值。 - Ivan StoevAutoMapper
将一个对象列表(例如 PersonViewModel)的值更新到目标现有实体中。我以为这是由于代理引起的,因为AutoMapper
保留了目标实例。我将进行更多的测试。无论如何,我的问题得到了 MegaTron 的正确回答,但你指出了一些非常有趣的东西。 - Alisson Reinaldo Silva