データベーステーブルには、char(2)
の列があります。.NET Entity Frameworkで文字列プロパティを使用するときにSQLクエリパラメータの種類を制御する方法
.Where(x => x.Code == code)
のようなlinqのパラメータを使用すると、暗黙的な変換を避けるために、SQLクエリパラメータはvarchar(max)
に変換され、実際にはchar(2)
になります。これは、クエリがデータベースのインデックスを使用していないためです。
Property(c => c.Code)
.HasColumnType("char")
.IsFixedLength()
.HasMaxLength(2);
コードの最初のマッピングは上記のとおりです。変換に影響を与える唯一のものは.HasColumnType("char")
です。クエリ変換に影響を与えないように思われるのは、varchar(max)
またはnvarchar(max)
を選択するかどうかに影響します。
私は2つの解決策を考えました.1つは、int
を使用し、charコードの代わりに検索を使用するようにデータベースを変更することです。もう1つは、式を使用するようにコードを変換することです。 SQLへのマッピングを制御するより良い方法があれば、私はむしろやっていないことを2つ挙げます。