繁体   English   中英

内部如何运作

[英]how does it work internally

var user = userContext.Users.First(u => u.Id == 1);
user.Name = "John";
userContext.SaveChanges();

EF如何知道仅“名称”列已更改,因此创建SQL查询来对其进行更新?

EF如何跟踪实体?

从数据库获取实体后,是否将实体的副本保留在内存中,然后从上下文中将其与修改后的实体进行比较?

简短的答案是肯定的。 EF保留从数据库读取的数据的“原始”副本。 您可以在MSDN上阅读有关变更跟踪的更多信息。

实体框架可以选择为每个跟踪更改的模型生成一个代理类。 本质上,它用自跟踪属性包装对象。

基本上,您可以设想它实现了这样的事情(我不确定实际的内部原理 ,但这在理论上应该有所帮助,如果您想确切地了解它如何完成的,可以进行反编译):

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.

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