EF 6、.NET 4.8:结果查询似乎没有使用 StringLength

问题描述 投票:0回答:1

我见过类似的问题并尝试应用答案,但无济于事,所以我想通过更多我所尝试的内容来提出我的问题。

我的财产是这样的:

[Column("colnm")], TypeName ="varchar")]
[StringLength(4)]
public string ColumnName { get; set; }

生成的选择查询变成这样:

@p__linq__0 varchar(8000)

我需要它是这样的:

@p__linq__0 varchar(4)

当它达到8000时,它会进行表扫描,并且查询根本没有性能。数据库中的列定义为

varchar(4)
,因此我尝试告诉 EF 使用
varchar(4)

需要明确的是,我们在需要这个实体之前已经设置了表,这不是迁移。我只是想让 EF 处理我的实体上的选择查询。

我尝试过仅使用

StringLength
,将其更改为
MaxLength
,将其与
TypeName("varchar(4)")
内联,以及 FluentAPI 中的所有上述内容以及我的上下文中的内容。它始终停留在
varchar(8000)

我知道我的实体会影响查询,因为当我将

varchar
更改为
nvarchar
时,我看到 8000 下降到 4000。但它永远不会下降到 4。

我也找不到任何明确覆盖我的

StringLength
的地方。

即使 ChatGPT 也提供了有意义的建议,但没有一个起作用。 :)

想法?

entity-framework-6 string-length .net-4.8 ef-fluent-api
1个回答
0
投票

你找到解决这个问题的方法了吗?我也有同样的问题

© www.soinside.com 2019 - 2024. All rights reserved.