JetBrains Rider 2025.2 Help

代码检查:由无限字符串长度引起的可能性能问题

Entity Framework 在创建数据库架构时,将实体类的字段转换为特定 DBMS 的数据类型。 由于 C# 中的 字符串 类型默认不指定最大长度,因此假定您希望存储最大长度的数据。 例如,在 SQL Server 中,此类数据将映射到 ntextvarchar(MAX)

默认情况下,SQL Server 将数据存储在磁盘上的页面中 ,其中每行及其数据可以达到 8060 字节的大小。 大对象数据类型(LOB),例如 varchar(max) ,超过 8060 字节的部分,将存储在 SQL Server 的单独位置。 当一行数据过大(或包含许多 LOB)时,SQL Server 无法一次性读取数据,必须在多个位置查找以过滤并返回查询的结果集,从而导致额外的 I/O 开销。

为了解决此问题,您可以为报告的属性设置一个最大长度,例如,使用 Data Annotations 或 Fluent API 属性将其设置为 100 个字符。 这将把该属性映射到 nvarchar(100) ,并防止与处理该属性相关的性能问题。 以下是使用 Data Annotations 的示例:

public string Address1 { get; set; }
[MaxLength(100)] public string Address1 { get; set; }

或者,您可以在数据库上下文模型创建逻辑中使用 HasMaxLength() 构建器方法:

public class SchoolContext : DbContext // .. protected override void OnModelCreating(DbModelBuilder modelBuilder) { // .. modelBuilder.Entity<StudentAddress>().Property(ci => ci.Address1) .HasMaxLength(100); } }
最后修改日期: 2025年 9月 26日