我正在使用视图返回复杂的搜索查询.当我使用
linq查询EF时,它返回同一行3次(实际的rowcount是正确的).
使用LinqPad我对我的ef实体和实际的数据库视图运行了相同的linq.
ReadmitPatientList .AsQueryable() .Where("PatientLastName.StartsWith(\"cooper\")") .OrderBy (rpl => rpl.PatientLastName) .Dump();
这就是我正在使用的linq.
linqpad将lambda显示为:
EF:
ReadmitPatientList.MergeAs (AppendOnly) .Where ( => .PatientLastName.StartsWith ("cooper")) .OrderBy (rpl => rpl.PatientLastName)
D B
ReadmitPatientList .Where ( => .PatientLastName.StartsWith ("cooper")) .OrderBy (rpl => rpl.PatientLastName)
我无法发布结果…但EF返回同一记录的三行. DB返回3行单独记录.和我的sql查询一样.
我需要更改我的EF LINQ才能使其正常工作?
EF Linq查询生成的sql代码如果在SQL Explorer中运行,则实际返回正确的结果.
解决方法
如果Patient实体没有主键,或者推断为主键的列在结果集中的多个记录中相同,则会发生这种情况. EF使用内部身份映射,该映射要求每个唯一标识的记录必须重用相同的实体实例.因此,如果从数据库返回三个具有相同EF唯一标识的记录,则返回表示结果集中第一个记录的三个相同实例的枚举(更多关于身份映射也是
here). Linq-to-sql的DataContext中也有相同的行为.