我们在国际上使用了大型SaaS ASP .NET 4.0应用程序。我们正在慢慢地将我们的经典ADO数据提供者迁移到实体框架。
我们使用MS Sql server 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负责人。
答案 0 :(得分:1)
好的我明白了。在MySql中,可以在连接字符串中添加编码信息,Microsoft sql不允许这样做。
EF似乎通过查看默认数据库排序规则来确定编码。在我们的设置中,数据库归类是Latin1,而具有客户特定数据的表具有归类“Turkish_CI_AS”。
所以我有两个选择:
1)更改整个数据库的默认排序规则(影响 系统和配置表等)
2)将我的列更改为nvarchar
最后将改为unicode,现在我们将使用一些好的旧ADO.NET,它可以正常工作! :)
tnx和我一起思考