簡體   English   中英

更新后會話對象為null

[英]session object is null after update

我正在用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(...);}

當我運行代碼時,會話始終為null。 我第二次添加此行,就在此之后,查詢再次運行。 當我希望在代碼的其他位置使用會話時,那里也為null。 該查詢之所以有效,是因為當我在return語句上放置一個斷點時,我看到對象已正確填充。

請讓我知道問題出在哪里,我被困在這個看似簡單的問題上,而且我沒有發現我做錯了什么。

感謝您的建議。

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 ,這就是為什么它返回null的原因-為什么首先需要As運算符? 如果您的查詢始終返回一個MyModel類型的實例, MyModel您應該

return MyQuery;

如果您的查詢包含一個MyModel 枚舉 (這是它的樣子),而您只想返回一個可以使用的

return myQuery.FirstOrDefault();

代替。

最有可能是在Page.Load事件之后觸發了MasterPage.Load事件。 嘗試使用母版頁的Init事件,該事件將在Load事件之前運行。

您的MyQuery變量的類型為IQueryable<MyQuery> ,而不是您嘗試投射的MyModel類型。 因此,此行return MyQuery as MyModel返回null

嘗試將其更改為例如

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

return MyQuery.ToList();

它應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM