更新后,session对象为null

时间:2011-03-27 16:25:37

标签: c# asp.net linq-to-sql

我正在使用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。我刚刚第二次添加了这一行,然后再次运行查询。当我想在代码中的某个其他位置使用会话时,它也是空的。查询有效,因为当我在return语句上放置断点时,我看到对象已正确填充。

请让我知道问题的来源,我仍然坚持这个看似简单的问题而且我没有看到我做错了什么。

感谢您的建议。

3 个答案:

答案 0 :(得分:1)

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类型的单个实例,那么您应该

return MyQuery;

如果您的查询包含MyModel的枚举(这就是它的样子)并且您只想返回一个可以使用的

return myQuery.FirstOrDefault();

代替。

答案 1 :(得分:0)

最有可能的是,MasterPage.Load事件在Page.Load事件之后触发。 尝试使用Master Page的Init事件,该事件将在Load事件之前运行。

答案 2 :(得分:0)

您尝试投射时,MyQuery变量的类型为IQueryable<MyQuery>,而非MyModel。因此,此行return MyQuery as MyModel返回null

尝试将其更改为例如。

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

return MyQuery.ToList();

它应该有用。