2012-01-22 6 views
0

データベーステーブルには、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つ挙げます。

答えて

0

私はこれを達成する方法を工夫しました。

代わりの.Where(x => x.Code = code)

を使用して、私は今、これは、クエリ内で一定ではなく、パラメータに変換

...

.Where(x => codes.Contains(x.Code)) 

var codes = new string[] { code } 

を使用しています。

関連する問題