我有一个EF查询,如下所示:
var x = _db.qMetaDataLookups.ToList();
如果我执行,直接在SQL服务器SELECT * FROM qMetaDataLookup
上,则返回2155个不同的行。执行上述操作后,x ALSO包含2155个元素。
问题是数据错误。我没有从SQL查询中获取与EF相同的数据。
特别是,SQL输出中存在一个特定的元素,称之为“WXYZ”,它在查询的EF版本中完全没有出现(针对完全相同的数据库)。
相反,我发现很多重复。如果我拨打x.Distinct()
,则列表会从2155个元素过滤到仅仅143个。
我很沮丧。我从未见过我的EF和SQL结果在查询上有所不同。必须有一个非常简单的[face-palm]解释,但我很想念它。
感谢。
编辑 qMetaDataLookup(视图)包含有关我们数据库的信息。本质上,它是所有表和视图及其每个列的列表,以及有关数据类型,长度,精度,比例等的其他信息。此表中的“键”应该是与“tableName”匹配的列。 columnName“但是EF选择了所有数据类型属性。这就是查询无法按预期执行的原因。
答案 0 :(得分:1)
确保为实体数据模型中的qMetaDataLookup正确设置实体密钥。有时实体键搞砸了......
答案 1 :(得分:0)
问题可能是您的模型使用具有重复值的密钥,其中实体框架期望具有唯一值。例如,如果您的数据模型使用由来自其他表的外键组成的复合主键,则会发生这种情况。看起来EF非常不喜欢复合主键,因此查询返回的结果将生成看似重复的行。
修复似乎是在您的表中添加代理主键列,该列保证是唯一的。如果仍需要引用外部列,那么只要它们不被用作表的复合主键。
我不能对解决方案声称任何功劳,但这里有帮助我解决问题的链接: http://jepsonsblog.blogspot.ca/2011/11/enitity-framework-duplicate-rows-in.html