填充数据库集<;TEntity>;.仅具有指定字段的本地
本文关键字:字段 数据库 lt TEntity 填充 gt | 更新日期: 2023-09-27 18:05:07
在Linq-to-Sql中,为了减少查询时间,我只下载字段的子集进行处理。像这样的。。。
var local_data = from row in context.MyTable
select new {
ID = row.ID,
Name = row.Name,
EMAIL = row.EMAIL
};
然后我会简单地将投影数据转换为POCO集合。。。
foreach(var item in local_data){
collection.Add(
new MyTable(){
ID = item.ID,
NAME = item.NAME,
EMAIL = item.EMAIL
};
);
}
当处理大量、笨拙的表记录时,这非常有用,因为我只想提取少数列。当我听说DbSet<TEntity>.Local
时,我很想从Linq2SQL
切换过来,但我似乎找不到这个新的精简缓存系统的版本,它允许我将查询范围缩小到特定的列。我该怎么做?
允许我将查询范围缩小到特定列的缓存系统
对不起,答案是:不可能。
原因是EF的内部缓存用于跟踪实体,完整实体。能够通过Local
集合访问这些缓存的实体只是DbContext
API引入的额外功能。缓存不存在,因为它的。缓存用于跟踪更改。
当EF从数据库中具体化实体时,它将其原始值存储到更改跟踪器中,并经常存储其当前值的副本。当需要保存更改时,会比较这些值,并相应地生成SQL语句来存储更改。
现在您知道了这一点,您就会明白EF不能将参与方填充的实体存储到其缓存中。如果一个实体可以随机收集原始值和当前值,EF应该如何进行更改跟踪?
此外,投影--select new
-的结果永远不会被跟踪(缓存(,因此无法通过Local
集合访问。
因此,在这个方面,你不会因为转到EF而获得太多好处。