gpt4 book ai didi

c# - 不能在 Entity Framework 中使用土耳其语字符

转载 作者:行者123 更新时间:2023-11-30 12:31:06 25 4
gpt4 key购买 nike

我们有一个在国际上使用的大型 SaaS ASP .NET 4.0 应用程序。我们正在慢慢地将我们的经典 ADO 数据提供程序迁移到 Entity Framework 。

我们使用 MS Sql server 2008。对于土耳其客户,我们对字符列使用土耳其语排序规则“Turkish_CI_AS”。 IE。 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 将土耳其语字符添加到我的数据库中?有人有什么好的建议吗?我尝试了很多东西,但无法弄清楚:)

谢谢,弗兰克

编辑

在一个小的测试设置上运行分析器显示:

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 的责任。

最佳答案

好吧,我明白了。在 MySql 中,可以在连接字符串中添加编码信息,Microsoft sql 不允许这样做。

EF 似乎通过查看默认数据库排序规则来确定编码。在我们的设置中,数据库排序规则是 Latin1,而包含客户特定数据的表的排序规则是“Turkish_CI_AS”。

所以我有两个选择:

1) 更改整个数据库的默认排序规则(影响 系统和配置表等)

2) 将我的列更改为 nvarchar

到 unicode 的更改将在最后完成,现在我们将使用一些很好的旧 ADO.NET,它可以正常工作! :)

谢谢你和我一起思考

关于c# - 不能在 Entity Framework 中使用土耳其语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14483074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com