0

我有一个 EF 查询,如下所示:

var x = _db.qMetaDataLookups.ToList();

如果我直接在 SQL 服务器上执行,SELECT * FROM qMetaDataLookup将返回 2155 个不同的行。执行上述操作后,x ALSO 包含 2155 个元素。

问题是数据有误。我从 EF 获取的数据与从 SQL 查询获取的数据不同。

特别是,SQL 输出中存在一个特定元素,称为“WXYZ”,它在 EF 版本的查询中根本没有出现(针对完全相同的数据库)。

相反,我发现很多重复。如果我x.Distinct()将列表过滤器从 2155 个元素减少到仅 143 个。

我很困惑。我从未见过我的 EF 和 SQL 结果在如此简单的查询上有所不同。必须有一个非常简单的 [face-palm] 解释,但我错过了它。

谢谢。

编辑 qMetaDataLookup(视图)包含有关我们数据库的信息。本质上,它是所有表和视图的列表,以及它们的每一列,以及有关数据类型、长度、精度、比例等的其他信息。该表中的“键”应该是与“tableName”匹配的列。 columnName”,而是 EF 为其选择了所有数据类型属性。这就是查询无法按预期执行的原因。

4

2 回答 2

1

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

于 2013-01-21T22:31:42.987 回答
0

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

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

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

于 2015-03-13T22:37:10.650 回答