升级后ServiceStack ORMLite编码问题

时间:2018-03-01 00:04:42

标签: servicestack ormlite-servicestack

我们刚刚将一些软件从ServiceStack 4.0.62升级到ServiceStack 5.0.0.0。

由于某种原因,ormlite的编码管理似乎已经改变。

简单地保存带有包含特殊字符(例如Ø←↑→↓↔↕〜Σ∂φ)的字符串字段的DTO的代码现在可以保存吗?在DB。

有任何改变可能导致这种突破性变化。我们没有更改保存代码,保存前的断点清楚地显示了正确的字符。

这基本上是我们正在执行的代码:

DB.Save<DTOType>(dtoInstance)

2 个答案:

答案 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提供程序的升级版本。