varchar
列のテーブルがあり、この列をWHERE
句に使用するためにEntity Frameworkを使用しています。Entity Frameworkでvarcharカラムを処理する方法は?
Entity FrameworkによってN''
というクエリが生成されるため、列のインデックスは使用できません。エンティティフレームワークにnvarchar
の代わりにvarchar
クエリを生成させる方法がありますか?
varchar
列のテーブルがあり、この列をWHERE
句に使用するためにEntity Frameworkを使用しています。Entity Frameworkでvarcharカラムを処理する方法は?
Entity FrameworkによってN''
というクエリが生成されるため、列のインデックスは使用できません。エンティティフレームワークにnvarchar
の代わりにvarchar
クエリを生成させる方法がありますか?
実際にEFモデルをどのように構築したかによって、デザイナを使用している場合は、各列に必要なデータ型を指定できます(単純にvarchar
と設定すると完了です)。
あなたは、コードの最初のアプローチを使用している場合は、適切な属性を持つ列が(それがデフォルトでnvarchar
をマッピングしますので、.NETでstring
オブジェクトは常にUnicodeです)、単にこれを行うことを表すプロパティを飾るために持っています(あなたがStringAttribute
を使用している場合は、データの注釈で、その後、false
にそのIsUnicode
プロパティをSE):
[Column(TypeName = "varchar")]
public string YourColumnName
{
get;
set;
}
あなたは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
Iが正しく列のタイプ(CHAR)と長さ(6)が設定されています。余分なメタデータクラスを追加し、Column(TypeName = "char")]とStringLength属性でプロパティを修飾しました。しかし、私は奇妙なコードをSELECT TOP(2)とvarchar(8000)をパラメータとして実行しています。それを修正するには? – Naomi
@Naomiはそれに答えるための詳細が不十分です。それを新しい質問として投稿し、クラス宣言に関連する部分を含め、そのようなSQLを生成するために実行するコードを忘れないようにしてください! –
明日新しい質問を追加することがあります。私は実際に既にMSDNでこの質問をしています。http://social.msdn.microsoft.com/Forums/vstudio/en-US/696f5fd6-d10f-40d3-82d2-feea806965cc/two-same-classes-how-to-add-属性対属性?forum = csharpgeneral – Naomi