ReSharper 2024.1 ヘルプ

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

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

デフォルトでは、SQL Server はデータをディスク上のページに保存します。各行とそのデータのサイズは 8060 バイトになります。8060 バイトを超える varchar(max) などのラージオブジェクトデータ型 (LOB) は、SQL Server の別の場所に格納されます。行が大きすぎる (または LOB が多い) 場合、SQL Server は一度にデータを読み取ることができず、クエリの結果セットをフィルタリングして返すために複数の場所を検索する必要があり、追加の 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); } }

関連ページ:

コードインスペクション設定を構成する

設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...

コード検査: 関数は SQL に変換できないため、データベースコンテキストで呼び出すことはできません

エンティティフレームワークは、LINQ クエリ内のメソッドを DBMS で実行される SQL に変換しようとします。ただし、すべての .NET メソッドがサポートされているわけではありません。LINQ to Entities でサポートされていないメソッドが呼び出される場合、呼び出しは実行時に失敗し、通常はがスローされますこの問題を解決するには、SQL に変換可能な LINQ クエリの部分のみがデータベースコンテキストの範囲内で使用されるようにします。他の部分はクエリの後に使用し、メモリ内で実行...