[英]how does it work internally
var user = userContext.Users.First(u => u.Id == 1);
user.Name = "John";
userContext.SaveChanges();
EF
如何知道仅“名称”列已更改,因此创建SQL查询来对其进行更新?
EF
如何跟踪实体?
从数据库获取实体后,是否将实体的副本保留在内存中,然后从上下文中将其与修改后的实体进行比较?
实体框架可以选择为每个跟踪更改的模型生成一个代理类。 本质上,它用自跟踪属性包装对象。
基本上,您可以设想它实现了这样的事情(我不确定实际的内部原理 ,但这在理论上应该有所帮助,如果您想确切地了解它是如何完成的,可以进行反编译):
internal List<string> ChangedFields = new List<string>();
private string _name;
public string Name
{
get { return _name; }
set {
ChangedFields.Add("Name");
_name = value;
}
}
显然,对于每个字段都复制了此内容,然后在ChangedFields
跟踪您对其进行更改的每个字段。
再次,这仅仅是出于说明目的,说明如何使用带有显式get
/ set
属性来工作, 而不是专门针对Entity Framework。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.