使用Guid ID与ServiceStack 4和MySQL

时间:2014-03-10 07:36:47

标签: c# mysql servicestack ormlite-servicestack

如何在ServiceStack 4的OrmLite.MySql中更改Guids的序列化方法?

版本3与MySQL存储Guids作为没有破折号的文本,同样没有使用破折号进行比较。

升级ServiceStack 4后,我的所有查找都不返回任何数据。在MySQL日志中,OrmLite发送的查询现在包括破折号,这就是没有匹配的原因。我需要将其设置回以前的行为。

我有如下定制的序列化设置。他们现在是否也像DTO一样申请OrmLite?

    void CustomSerializationSettings()
    {
        ServiceStack.Text.JsConfig<Guid>.SerializeFn = guid => guid.ToString();
        ServiceStack.Text.JsConfig<Guid?>.SerializeFn = guid => guid.HasValue ? guid.ToString() : string.Empty;
        ServiceStack.Text.JsConfig.IncludeNullValues = true;
        ServiceStack.Text.JsConfig.DateHandler = ServiceStack.Text.DateHandler.ISO8601;
        ServiceStack.Text.JsConfig<DateTime>.SerializeFn = DateTimeSerialising.SerialiseDate; 
        ServiceStack.Text.JsConfig<DateTime>.DeSerializeFn = DateTimeSerialising.DeserialiseDate; 
        ServiceStack.Text.JsConfig<DateTime?>.SerializeFn = DateTimeSerialising.SerialiseDateN; 
        ServiceStack.Text.JsConfig<DateTime?>.DeSerializeFn = DateTimeSerialising.DeserialiseDateN; 
    }

1 个答案:

答案 0 :(得分:0)

这是一个breaking change in v4.09,其中MySql和Sqlite现在将Guids视为CHAR(36),其中special casing of Guids was removed for MySQL and Sqlite providers使得相同的SQL LINQ表达式可以在所有提供者中使用。

从命名空间ServiceStack.Text.JsConfig推断出仅适用于文本序列化,而不适用于OrmLite。除了使用自定义的MySqlDialectProvider覆盖OrmLite的MySqlDialectProvider以重新添加特殊套管之外,没有简单的覆盖。然而,建议升级数据以使用新的(自然的)Guid.ToString()格式;