ServiceStack自动查询不适用于DateTime值

我有一个使用autoquery的ServiceStack服务,其中DateTime大于或小于被忽略。

这是我的要求DTO:

    public class GetSources : QueryBase<DbSource, Source>
    {
       public string Name { get; set; }
       public string NameContains { get; set; }
       public string NameStartsWith { get; set; }
       public DateTime? LastUpdatedDateGreaterThan { get; set; }
       public DateTime? LastUpdatedDateLessThan { get; set; }
    }

从ormlite T4模板生成的数据库表poco看起来像这样:

[Alias("DbSources")]
[Schema("SomeSchema")]
public partial class DbSource 
{
    [AutoIncrement]
    public int Id { get; set;}
    [Required]
    public string Name { get; set;}
    [Required]
    public DateTime LastUpdatedDate { get; set;}
}

在服务中,我做了一些验证,然后像这样使用AutoQuery:

    var q = AutoQuery.CreateQuery(dto, Request.GetRequestParams());
    q.Join<DbSource, CompanySource>((source, companySource) => source.Id == companySource.SourceId && companySource.CompanyID == companyId);
    return AutoQuery.Execute(dto, q);

我使用mstest

    [TestMethod]
    public void GetSources_LastUpdatedGreaterThan()
    {
        var expected = DateTime.Now;
        var query = new GetSources { LastUpdatedDateGreaterThan = expected};
        QueryResponse<Source> result;
        using (var service = appHost.Container.Resolve<SourceService>())
        {
            service.Request = new MockHttpRequest();
            result = service.Any(query);
        }
        log.Info(result.ToJson());
        result.Results.ForEach(src => Assert.IsTrue(src.LastUpdatedDate > expected));
    }

Name,NameContains和NameStartWith在其他测试中按预期工作,但LastUpdatedDateGreaterThan和LastUpdatedDateLessThan都不会生成where子句。 在我的AutoQuery设置中,所有属性都是默认值,但EnableUntypedQueries为false。

我知道我可以明确地在服务中添加他们的位置。 即

    q.Where(source => source.LastUpdatedDate > dto.LastUpdatedDateGreaterThan);

但是如果可能的话,我想让AutoQuery来处理它。 DateTime是否适用于AutoQuery? 或者我在代码中做错了什么?


我通过ServiceStack AutoQuery单元测试了使用sql server创建的mythz。 我使用数据库视图进行了测试,我的原始项目正在查询,我无法复制我遇到的问题。 现在,我将仅添加QueryField属性到Query模型中的DateTime属性,如下所示:

[QueryField(Template = "{Field} > {Value}", Field = "LastUpdatedDate")]
public DateTime? LastUpdatedDateGreaterThan { get; set; }

添加属性给了我我需要的东西。 稍后我会花一些时间追踪我的代码中的罪魁祸首。

链接地址: http://www.djcxy.com/p/65969.html

上一篇: ServiceStack AutoQuery not working for DateTime values

下一篇: ServiceStack taking a long time to execute stored procedure