我们刚刚将一些软件从ServiceStack 4.0.62升级到ServiceStack 5.0.0.0。
由于某种原因,ormlite的编码管理似乎已经改变。
简单地保存带有包含特殊字符(例如Ø←↑→↓↔↕〜Σ∂φ)的字符串字段的DTO的代码现在可以保存吗?在DB。
有任何改变可能导致这种突破性变化。我们没有更改保存代码,保存前的断点清楚地显示了正确的字符。
这基本上是我们正在执行的代码:
DB.Save<DTOType>(dtoInstance)
答案 0 :(得分:2)
我正在浏览ServiceStack ORMlite代码并发现了这一点:
。OrmLiteConfig.DialectProvider.GetStringConverter()了useUnicode;
所以我试着调用
OrmLiteConfig.DialectProvider.GetStringConverter();
在DB.Save调用返回false之前,这将解释该问题,因为这会将dbCmd设置为使用VARCHAR而不是NVARCHAR
我设置
var stringConverter = OrmLiteConfig.DialectProvider.GetStringConverter();
stringConverter.UseUnicode = true;
在AppHost初始配置中修复了问题。
显然我无法正确阅读文档,如此处所述
https://github.com/ServiceStack/ServiceStack.OrmLite/wiki/OrmLite-Type-Converters
答案 1 :(得分:1)
可能对此产生影响的主要变化是切换到paramaterized queries in v4.0.60。 OrmLite通常本身不对正常的字符串属性进行任何编码,即它只是将字符串值传递给ADO.NET DB参数。
它转换字符串值的主要时间是serializes complex types into blobs。
问题可能最终是使用ADO .NET提供程序的升级版本。