我见过类似的问题并尝试应用答案,但无济于事,所以我想通过更多我所尝试的内容来提出我的问题。
我的财产是这样的:
[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 也提供了有意义的建议,但没有一个起作用。 :)
想法?
你找到解决这个问题的方法了吗?我也有同样的问题