2015-03-17 2 views
2

У меня есть служба ServiceStack с использованием autoquery, где DateTime больше или меньше, чем игнорируются.ServiceStack AutoQuery не работает для значений 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 выглядит следующим образом:

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

Имя, NameContains и NameStartsWith все работы, как ожидается, в других тестах, но оба LastUpdatedDateGreaterThan и LastUpdatedDateLessThan не порождают где положение. В моей настройке AutoQuery все свойства являются значениями по умолчанию, за исключением EnableUntypedQueries, который является ложным.

Я знаю, что могу явно добавить, где для них в службе. то есть

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

Но если возможно, я бы хотел, чтобы AutoQuery позаботился об этом. Работает ли DateTime с AutoQuery? Или я делаю что-то неправильно в своем коде.

+0

Можно ли создать автономный репрограмм (например, в репозитории github или gistub), поскольку я не могу воспроизвести [любые проблемы с использованием DateTime с помощью AutoQuery] (https://github.com/ServiceStack/ServiceStack/фиксации/90153dde65475f7fd81bca73766524b50e36d68b). – mythz

ответ

1

Я проверил модульные тесты AutoCuery Servicestack, которые создаются с использованием sql-сервера. Я протестировал, используя представление базы данных, к которому обращался мой первоначальный проект, и я не смог воспроизвести проблему, которую у меня есть. Сейчас я собираюсь просто добавить атрибут QueryField к DateTime свойств на модели запроса, как это:

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

Добавление атрибута дает мне то, что мне нужно. Я потрачу некоторое время на отслеживание виновника в моем коде позже.

 Смежные вопросы

  • Нет связанных вопросов^_^