我们有一个在国际上使用的大型 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。