gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:09 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com