コードインスペクション: 文字列の長さが無制限であることによって発生する可能性のあるパフォーマンスの問題が発生します。
エンティティフレームワークは、データベーススキーマの作成中に、エンティティクラスのフィールドを特定の 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 日