在我的WebApi项目中,我使用EF6,遵循Uow和通用存储库模式,我还将模型映射到dto,反之亦然。
目前,我在创建dbContext
时设置了以下内容:
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
从数据库中获取数据时,我也使用AsNoTracking
。
更新数据库时,我在处理小实体时(即没有关系)直接使用dbContext附加实体。我将GraphDiff用于复杂的实体(即有关系)。
当启用代理和跟踪,甚至禁用它们时,我注意到发送到数据库的SQL语句包括所有表的列,而不是仅包含那些实际已更改的列。
但是,GraphDiff在将更改保存到数据库之前再次加载实体。在这种情况下,SQL语句也包含所有列。这是正确的行为吗?
因此,在我的场景中,当我处理分离的实体时,禁用代理和跟踪是否安全?