c# - 在使用 Entity Fluent API 映射的 View 中使用 ROW_NUMBER 设置主键会使 linq 超时

标签 c# sql-server linq entity-framework

我的问题如下:我通过 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/

相关文章:

c# - LINQ to 实体慢查询

c# - 如何在 L2E 或 EF 中使用外键?

C# 动态 Linq : Strings are assumed to be integers?

c# - 如何最小化 OleDbDataAdapter 从远程数据库获取数据的时间

c# - 如何手动设置 HttpContext.User.Identity.IsAuthenticated 的值

sql-server - 光滑的MSSQL "Failed to create Slick database config for key default"

sql-server - Azure SQL 数据库 - 对 10 多百万行建立索引

c# - 正则表达式替换 C# 中的标签

c# - 将 asp net 5 从 beta 升级到 beta 5 后,似乎无法构建类库项目

SQL 除以 2 计数()