2013-06-12 4 views
0

Я использую плагин jquery Fullcalendar для отображения событий в представлении календаря в моем приложении MVC 4.Linq-To-Entities и запрос с датами

Я настроил плагин, который правильно вызывает действие моего контроллера, передавая два двойных параметра, которые представляют дату начала и дату окончания, отображаемую в текущем представлении в форматах timestamp unix.

Здесь вы можете увидеть мой контроллер метод действия

[HttpPost] 
public ActionResult GetEvents(double start, double end) { 
    DateTime dtStart = DateTimeUtils.UnixTimeStampToDateTime(start); 
    DateTime dtEnd = DateTimeUtils.UnixTimeStampToDateTime(end); 

    IPolicyRepository _pRepo = _uow.PolicyRepository; 
    IEnumerable<Policy> model = 
    _pRepo.Find(p => p.EndDate >= dtStart.Date && p.EndDate < dtEnd.Date); 

    ... 
} 

Метод DateTimeUtils.UnixTimeStampToDateTime(double) преобразует временную метку UNIX в объекте даты и времени следующим образом

public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) { 
    // Unix timestamp is seconds past epoch 
    DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime(); 
    return dtDateTime; 
} 

Однако Find метод хранилища, который в свою очередь, просто передать лямбду в EF, не возвращает ни одной строки, даже если некоторые строки существуют. Я подозреваю, что эта проблема может быть вызвана различными форматами и/или языками, которые у меня есть между браузером и сервером базы данных.

Как я могу решить эту проблему и создать запрос, который будет знать о локалях и определенных форматах?

EDIT: Для получения более подробной информации я добавляю определение модели здесь

public partial class Policy 
{ 
    public int PolicyID { get; set; } 

    [...] 

    [Required] 
    [DisplayName("Begin date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")] 
    public DateTime BeginDate { get; set; } 

    [Required] 
    [DisplayName("Due Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")] 
    public DateTime EndDate { get; set; } 
} 
+0

Предполагая, что SQL, возможно, запущен 'Профилировщик' и посмотреть, что он отправляет? – MisterIsaak

+0

Вы можете начать головную боль, сосредоточенную вокруг глобализации/локализации ... http://msdn.microsoft.com/en-us/library/aa292205%28v=vs.71%29.aspx –

+0

@JIsaak: спасибо за ответ. могу ли я использовать профайлер на экземпляре localdb? – Lorenzo

ответ

0

Я нашел эту проблему.

Наличие атрибута DisplayFormat на модели класса была причиной проблемы

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")] 

Просто удалены, и это прекрасно работает!

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