我的问题如下:我通过 Entity Fluent API 将我的 View 映射到一个对象。我需要一个包含几个左连接的 View ,并且表中没有唯一标识符,因此 Entity 总是返回同一组对象。在几个不同的线程/博客中,我看到了一个解决方案,包括添加一个列
ROW_NUMBER() OVER (ORDER BY Id))
然后我尝试将其映射到 Entity 中: 在我的课上我添加了一个属性
public long Row { get; set; }
在我的配置类中添加
HasKey(imc => imc.Row).HasColumnName("Row")
显然,映射有效。不起作用的是,当我使用 linq 查询对象时,即使是 Count() 也会超时;然而,当在 SQL Management Studio 环境中使用时,请求本身仅返回大约 200 行。
有没有人见过这个问题?
编辑: 我已经能够通过在 MS SQL View 中用 newid() 替换“row_number()”来绕过这个问题,但我仍然担心以后可能会出现问题。
最佳答案
您的查询速度慢导致超时。大约有 100 万人以前看过这个。您需要分析查询计划。如果未索引,则在整个表上计算行号可能会很慢。此外,行号不能用作键,因为它的值会在您更改基础数据时发生变化。 EF 不支持更改 key 。
如果您使用 newid()
作为 View 中的“键”,那么您每次都会获得新的 ID。我认为您可能没有意识到 View 只是该特定查询的快捷方式这一事实。它的内容不会存储在任何地方。
引入一个可以作为键的列。例如 IDENTITY
列。
关于c# - 在使用 Entity Fluent API 映射的 View 中使用 ROW_NUMBER 设置主键会使 linq 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31001059/