升级后 ServiceStack ORMLite 编码问题
ServiceStack ORMLite encoding issue after upgrade
我们刚刚将一些软件从 ServiceStack 4.0.62 升级到 ServiceStack 5.0.0.0。
出于某种原因,ormlite 的编码管理似乎已更改。
简单地保存一个 DTO 的代码,该 DTO 的字符串字段包含特殊字符(例如 Ø ← ↑ → ↓ ↔ ↕~ Σ ∂ φ),以前在 4.0.62 中工作,现在保存?在数据库中。
是否有任何可能导致重大变化的变化。我们没有更改保存代码,保存之前的断点清楚地显示了正确的字符。
这基本上是我们正在执行的代码:
DB.Save<DTOType>(dtoInstance)
可能对此产生影响的主要变化是切换到 paramaterized queries in v4.0.60。 OrmLite 通常本身不对普通字符串属性进行任何编码,即它只是将字符串值传递给 ADO.NET DB 参数。
它转换字符串值的主要时间是 serializes complex types into blobs。
问题可能在于使用 ADO .NET 提供程序的升级版本。
我正在查看 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
我们刚刚将一些软件从 ServiceStack 4.0.62 升级到 ServiceStack 5.0.0.0。
出于某种原因,ormlite 的编码管理似乎已更改。
简单地保存一个 DTO 的代码,该 DTO 的字符串字段包含特殊字符(例如 Ø ← ↑ → ↓ ↔ ↕~ Σ ∂ φ),以前在 4.0.62 中工作,现在保存?在数据库中。
是否有任何可能导致重大变化的变化。我们没有更改保存代码,保存之前的断点清楚地显示了正确的字符。
这基本上是我们正在执行的代码:
DB.Save<DTOType>(dtoInstance)
可能对此产生影响的主要变化是切换到 paramaterized queries in v4.0.60。 OrmLite 通常本身不对普通字符串属性进行任何编码,即它只是将字符串值传递给 ADO.NET DB 参数。
它转换字符串值的主要时间是 serializes complex types into blobs。
问题可能在于使用 ADO .NET 提供程序的升级版本。
我正在查看 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