我在将标题写成更有意义的内容方面遇到了麻烦,所以在我的问题中我会变得有点啰嗦。
我有这个EF查询:
var allSocs = _db.Socs
.Where(x => x.Soc6 != null)
.Select(x => new SocModel {
OccupationalEmploymentStatistics = x.OccupationalEmploymentStatistics
.Where(y => y.GeographyId == 25 && y.Release == "2015A01" && y.Naics == "000000")
.OrderByDescending(z => z.AnnualWageMedian),
Soc6 = x.Soc6,
OnetSocs = x.OnetSoc,
Name = x.Name,
Description = x.Description,
EmploymentProjections = x.EmploymentProjections
.Where(y => y.GeographyId == "201400" && y.Naics == "000000")
}).ToList();
它返回一个名为Soc
的对象列表,它们具有一些原始属性和三个对象属性Onetsocs
,OccupationalEmploymentStatistics
和EmploymentProjections
。
我所拥有的行为是所有非对象字段都正常工作,EmploymentProjections
和OnetSocs
也是如此。
问题在于OccupationalEmploymentStatistics
表现得很奇怪。似乎EF只是一个 OccupationalEmploymentStastic
并将其应用于_db.Socs
中的所有记录。
如果我设置断点并将鼠标悬停在_db.Socs
上,我会显示有only one个对象。但是,allSocs
中有适当数量的Socs(841)。
我已尝试删除OrderByDescending
以查看是否可能是问题,但我仍然会遇到相同的行为。
对于某些背景信息,我正在使用的表格都是外部表格,我必须手动绘制关系,因为EF没有接受它们。
编辑:更多背景信息。如果我提出另一个问题,那就是
var socs = _db.Socs.ToList()
,只有第一条记录有任何OccupationalEmploymentStatistics
。没有其他记录有任何
答案 0 :(得分:0)
因为EF使用身份地图模式。基本上,EF会话只存储给定实体和id的一个实例,并且每当某个实体指向同一个DB表和主键时,它将始终重用相同的实例。