JetBrains Rider 2026.1 Help

コードインスペクション:文字列の長さが無制限であることによって発生する可能性のあるパフォーマンス問題

エンティティフレームワークは、データベーススキーマの作成中に、エンティティクラスのフィールドを特定の DBMS のデータ型に変換します。 C# の string タイプではデフォルトで最大長が指定されていないため、最大長のデータを格納する必要があると想定されます。 例: SQL Server では、そのようなデータは ntext または varchar(MAX) にマッピングされます。

デフォルトでは、SQL サーバー はディスク上のページにデータを保存し 、各行とそのデータは 8060 バイトのサイズにできます。 8060 バイトを超える varchar(max) などの大型オブジェクトデータ型(LOB)は、SQL サーバー内の別の場所に保存されます。 行が大きすぎる場合(または多くの LOB がある場合)、SQL サーバーはデータを一度に読み込むことができず、複数の場所を検索してクエリの結果セットをフィルターし返す必要があり、追加の I/O オーバーヘッドが発生します。

この問題を解決するには、データアノテーションまたは Fluent API 属性を使用して、報告されるプロパティの最大長を、たとえば 100 文字に設定します。 これにより、プロパティが nvarchar(100) にマップされ、このプロパティの処理に関連するパフォーマンスの問題が回避されます。 データアノテーションを使用した例を次に示します。

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); } }
2026 年 6 月 12 日