2011-10-20 21 views
1

私はééíúñのような特殊文字を使用して名前を挿入する必要があるアプリケーションを開発しています.LineqをVisual C#でエンティティに使用しています。エンティティへのLinqとSQL_Latin1_General_CP1_CI_AI

データベースサーバーがSQL 2008 expressで、データベースの既定の照合順序がSQL_Latin1_General_CP1251_CI_ASですが、フィールドの照合順序をSQL_Latin1_General_CP1_CI_AIに変更して、上記の特殊文字を挿入する必要があります。

私はこのようなコード使用して特殊文字を含む名前を挿入した場合:

Cliente cli = new Cliente() 
      { 
       Nombres = cliente.nombres, 
       ApellidoP = cliente.apellidoP, 
       ApellidoM = cliente.apellidoM, 
       FechaNac = cliente.fechaNacimiento 
      }; 
      context.clientes.AddObject(cli); 
      context.SaveChanges(); 

特殊文字はそれらと同等に翻訳されているが、私は直接データベース(管理スタジオ)に特殊文字を含む名前を挿入した場合Iこれらの文字を挿入する際に問題はありません。

Visual Studioでプロジェクトを作成した後、フィールドの照合順序をSQL_Latin1_General_CP1_CI_AIに変更したため、データベースからモデルを更新すると問題は解決すると思っていましたが、間違っていました。 私は、Clienteオブジェクトの新しいインスタンスを作成するときに特殊文字が存在するかどうかをチェックするためにデバッガを使用しました。

何が問題なのですか?

+0

Internet Explorerで値を更新するときも同様の問題がありましたが、FirefoxとChromeの場合は問題はありませんでした。これは$ .post()を使用したときに行われました。 –

+0

ありがとう@Huskeしかし、私の問題はwinformsです –

答えて

2

コードやアプローチに間違いはありません。これはデータベースの問題と思われます。最高の解決策は、BD照合をSQL_Latin1_General_CP1_CI_AIに変更することですが、開発フェーズに合格する場合は、通常は実行するのが難しいです。

次のいずれかを試みることができる:

、あなたのモデルから特殊文字を保持するフィールドのプロパティを持つエンティティを排除再びデータベースからのモデルの更新を実行し、テーブルを再度追加します。エンティティを更新するための更新では不十分な場合があります。また、フィールド固有の照合設定が最初に考慮されていないこともあります。

this postをご覧ください。たぶん、問題はあなたのテーブルのデザインと関係があります。

またはthis other post。同様のアプローチを使用すると、おそらくBDの照合順序を変更することができます(他のアプリケーションで使用されていない場合 - 可能性はありません)。

これが役に立ちます。

+0

私はあなたの提案を試みたが、問題は解決し、エンティティを削除し、エンティティを再度追加しても問題は解決しませんでした。誰かが私にSQLプロファイラを見るように提案しましたが、私は 'exec sp_executesql'コマンドで特殊文字がなくなっているので、問題があります。これがEFやデータベースと関連しているかどうかは分かりません。 unicode(nvarchar)を使用するのはストレージサイズを増やすためではありません。 AFAIK、スペイン語の文字は特にUnicode表現を必要としません。ありがとう –

+0

あなたの列にどのようなタイプが定義されていますか? [新しい開発のためにnchar - nvarcharを使用してMSが推薦する](http://msdn.microsoft.com/en-us/library/ms187993.aspx)私は、特定の照合設定がnchar/nvarcharと異なるカラムでは動作しないと考えています。 –

+0

おそらくあなたはそれを試すことができます。 SQL_Latin1_General_CP1251_CI_AS照合で新しいDBを作成します。1つのnvarcharともう1つのntext(または使用する型)の2つの列を持つテーブルを追加し、両方の列の照合順序をSQL_Latin1_General_CP1_CI_AIに設定し、どちらがEFで動作するかを確認します。幸運を! –

関連する問題