国際的に使用されている大規模な SaaS ASP .NET 4.0 アプリケーションがあります。従来の ADO データプロバイダーを Entity Framework に徐々に移行しています。
MS Sql サーバー 2008 を使用しています。トルコのお客様には、文字列にトルコ語の照合順序「Turkish_CI_AS」を使用しています。つまり、8 ビットの varchar フィールド (16 ビットの nvarchar 列は使用しません)
EF で新しいオブジェクトを追加すると、問題が発生しました。「ş」などの特殊文字は次のように変更されます。
using (TestEntities myEntity = new TestEntities())
{
MyObject test = new MyObject()
{
TestString = "baş"
};
myEntity.MyObjects.AddObject(test);
myEntity.SaveChanges();
}
デバッガーをステップ実行すると、次のコード行で "test.TestString" は "baş" のままです。
myEntity.MyObjects.AddObject(test);
ただし、データベースでは、フィールド「TestString」の値は「bas」です。「ş」は「s」として保存されます。これは、私の古いデータプロバイダー メソッドでは発生しません。
EF を使用してデータベースにトルコ語の文字を追加するにはどうすればよいですか? 誰にも良い提案がありますか?私はかなりのことを試しましたが、それを理解することはできません:)
tnx、フランク
編集
小さなテスト セットアップでプロファイラーを実行すると、次のようになります。
exec sp_executesql N'insert [dbo].[TestObjects]([TestChar])
values (@0)
select [TestId]
from [dbo].[TestObjects]
where @@ROWCOUNT > 0 and [TestId] = scope_identity()',N'@0 varchar(255)',@0='Bas'
どうやら sql が間違った値を受け取ったようです。実際に責任があるのは .NET です。