ServiceStack AutoQuery not working for DateTime values

I have a ServiceStack service using autoquery where the DateTime greater than or less than are being ignored.

Here is my request 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; }
    }

The database table poco generated from the ormlite T4 template looks like this:

[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;}
}

In the service I do some validation and then use AutoQuery like this:

    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);

I'm using 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, and NameStartsWith all work as expected in other tests, but both LastUpdatedDateGreaterThan and LastUpdatedDateLessThan do not generate a where clause. In my AutoQuery setup all of the properties are defaults except for EnableUntypedQueries which is false.

I know I can explicitly add the where for them in the service. ie

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

But if possible I would like AutoQuery to take care of it. Does DateTime work with AutoQuery? Or am I doing something wrong in my code.


I ran through the Servicestack AutoQuery unit tests that mythz created using sql server. I tested using a database view which my original project was querying against and I wasn't able to replicate the issue I'm having. For now I'm going to just add the QueryField attribute to the DateTime properties on the Query model like this:

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

Adding the attribute gives me what I need. I'll spend some time tracking down the culprit in my code later.

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

上一篇: ServiceStack可以通过System.DateTime值执行查询吗?

下一篇: ServiceStack自动查询不适用于DateTime值