使用DateTime的ServiceStack ORMLite SqlList问题

时间:2015-11-11 04:59:47

标签: mysql servicestack ormlite-servicestack

我正在从v4.0.36升级到v4.0.46,我遇到的问题是,通过此API生成的SQL无法正确转换DateTime值:

public static List<T> SqlList<T> (this IDbConnection dbConn, string sql, object anonType = null);

DateTime是一个属性,作为传递给方法的对象的一部分。

在v4.0.36上,DateTime值将导致字符串“yyyy-MM-dd HH:mm:ss”

然而,升级到v4.0.46后,DateTime值现在为“dd / MM / yyyy HH:mm:ss AM”

由于这种依赖日期的查询现在没有返回任何记录,因为MySQL无法识别这种格式。

我缺少配置吗?或者我需要做什么改变才能获得与4.0.36相同的行为?

2 个答案:

答案 0 :(得分:2)

现在应该解决此问题from this commit,可从v4.0.47获取,现在available on MyGet支持以下每种调用方式:

class DateTest
{
    public DateTime Test { get; set; }
    public DateTime? TestNullable { get; set; }
}

using (var db = OpenDbConnection())
{
    db.DropAndCreateTable<DateTest>();

    var dateTime = new DateTime(2001, 1, 1, 1, 1, 1);
    db.Insert(new DateTest{ Test = dateTime, TestNullable = dateTime });

    var row = db.SqlList<DateTest>(
        "SELECT * FROM DateTest WHERE Test = @dateTime"), new { dateTime });

    row = db.SqlList<DateTest>(
        "SELECT * FROM DateTest WHERE TestNullable = @dateTime"), new { dateTime });

    DateTime? nullDate = dateTime;
    row = db.SqlList<DateTest>(
        "SELECT * FROM DateTest WHERE TestNullable = @nullDate"), new { nullDate });
}

答案 1 :(得分:0)

根据我对4.0.52的经验,这仍然打破了DateTime的空值?到处都很简单;

 SqlServerDialect.Provider.RegisterConverter<DateTime?>(new SqlServerDateTimeConverter());