2013-03-12 12 views
7

varchar列のテーブルがあり、この列をWHERE句に使用するためにEntity Frameworkを使用しています。Entity Frameworkでvarcharカラムを処理する方法は?

Entity FrameworkによってN''というクエリが生成されるため、列のインデックスは使用できません。エンティティフレームワークにnvarcharの代わりにvarcharクエリを生成させる方法がありますか?

答えて

6

実際にEFモデルをどのように構築したかによって、デザイナを使用している場合は、各列に必要なデータ型を指定できます(単純にvarcharと設定すると完了です)。

あなたは、コードの最初のアプローチを使用している場合は、適切な属性を持つ列が(それがデフォルトでnvarcharをマッピングしますので、.NETでstringオブジェクトは常にUnicodeです)、単にこれを行うことを表すプロパティを飾るために持っています(あなたがStringAttributeを使用している場合は、データの注釈で、その後、falseにそのIsUnicodeプロパティをSE):

[Column(TypeName = "varchar")] 
public string YourColumnName 
{ 
    get; 
    set; 
} 
+0

Iが正しく列のタイプ(CHAR)と長さ(6)が設定されています。余分なメタデータクラスを追加し、Column(TypeName = "char")]とStringLength属性でプロパティを修飾しました。しかし、私は奇妙なコードをSELECT TOP(2)とvarchar(8000)をパラメータとして実行しています。それを修正するには? – Naomi

+0

@Naomiはそれに答えるための詳細が不十分です。それを新しい質問として投稿し、クラス宣言に関連する部分を含め、そのようなSQLを生成するために実行するコードを忘れないようにしてください! –

+0

明日新しい質問を追加することがあります。私は実際に既にMSDNでこの質問をしています。http://social.msdn.microsoft.com/Forums/vstudio/en-US/696f5fd6-d10f-40d3-82d2-feea806965cc/two-same-classes-how-to-add-属性対属性?forum = csharpgeneral – Naomi

5

あなたはEntityFunctions.AsNonUnicode(String)メソッドを使用することができますので、その後、EFは、として文字列値を渡しません。 nvarchar。私は、Oracleデータベースがvarchar2の列インデックスを無視していたEF5とEDMXで同じ問題を抱えていました。

var q = (from TableClass t in TableName 
     where t.varchar2Column == EntityFunctions.AsNonUnicode(someText)); 

MSDN参照:EDMXでhttps://msdn.microsoft.com/pt-br/library/system.data.objects.entityfunctions(v=vs.110).aspx

関連する問題