объект сеанса является нулевым после обновления - PullRequest
0 голосов
/ 27 марта 2011

Я заполняю объектную модель запросом linq.Модель выглядит следующим образом:

MyModel{
DateTime AppointDate {get; set;}
int TotalAppoints {get; set;}
int AppointDuration {get; set;}
}

Запрос linq-to-sql выглядит так:

    public static GetAppointsFromDB(params){

    var MyQuery = from....where...
                  select new MyModel{
                    AppointDate = ...,
                    TotalAppoints = ...,
                    AppointDuration =...};

    return MyQuery as MyModel;}

На главной странице я ищу, чтобы загрузить результат этогозапрос в сеансе выглядит так:

if (Session["Appoints"] == null) {Session["Appoints"] = GetAppointsFromDB(...);}

Когда я запускаю с кодом, сеанс всегда нулевой.Я добавил эту строку во второй раз, сразу после этого, и запрос снова выполняется.Когда я пытаюсь использовать сессию в каком-то другом месте кода, она тоже там нулевая.Запрос работает, потому что, когда я ставлю точку останова в операторе return, я вижу, что объект правильно заполнен.

Пожалуйста, дайте мне знать, откуда возникла проблема, я застрял в этой, казалось бы, простой проблемене вижу, что я делаю неправильно.

Спасибо за ваши предложения.

Ответы [ 3 ]

1 голос
/ 27 марта 2011
public static GetAppointsFromDB(params)
{

  var MyQuery = from....where...
                select new MyModel{
                AppointDate = ...,
                TotalAppoints = ...,
                AppointDuration =...};

  return MyQuery as MyModel;
}

Предположим, этот метод действительно возвращает MyModel, поэтому:

public static MyModel GetAppointsFromDB(params)

Теперь вы, вероятно, видите, что MyQuery приводит к чему-то, что не может быть приведено к MyModel, поэтому оно возвращает ноль - зачем вам сначала нужен оператор As? Если ваш запрос всегда возвращает один экземпляр типа MyModel, вам нужно просто

return MyQuery;

Если ваш запрос содержит перечисление MyModel (и это то, на что он похож), и вы хотите вернуть только один, вы можете использовать

return myQuery.FirstOrDefault();

вместо.

0 голосов
/ 27 марта 2011

Ваша MyQuery переменная имеет тип IQueryable<MyQuery>, а не MyModel, как вы пытаетесь разыграть Так что эта строка return MyQuery as MyModel return null.

Попробуйте изменить его, например, на

var MyQuery = from....where...
              select new MyModel{
                  AppointDate = ...,
                  TotalAppoints = ...,
                  AppointDuration =...};

return MyQuery.ToList();

и оно должно работать.

0 голосов
/ 27 марта 2011

Скорее всего, событие MasterPage.Load срабатывает после события Page.Load.Попробуйте использовать событие Init главной страницы, которое будет запускаться до событий загрузки.

...