EF查询包含不正确的元素

时间:2013-01-21 21:34:50

标签: entity-framework

我有一个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选择了所有数据类型属性。这就是查询无法按预期执行的原因。

2 个答案:

答案 0 :(得分:1)

确保为实体数据模型中的qMetaDataLookup正确设置实体密钥。有时实体键搞砸了......

答案 1 :(得分:0)

问题可能是您的模型使用具有重复值的密钥,其中实体框架期望具有唯一值。例如,如果您的数据模型使用由来自其他表的外键组成的复合主键,则会发生这种情况。看起来EF非常不喜欢复合主键,因此查询返回的结果将生成看似重复的行。

修复似乎是在您的表中添加代理主键列,该列保证是唯一的。如果仍需要引用外部列,那么只要它们不被用作表的复合主键。

我不能对解决方案声称任何功劳,但这里有帮助我解决问题的链接: http://jepsonsblog.blogspot.ca/2011/11/enitity-framework-duplicate-rows-in.html