0

在实体框架 vs2010 上工作,我想在某处存储从数据库中获取的一组对象。因为我不想在用户请求之后调用 DB。我这样做:

public IEnumerable<Message> Messages {
    get { return HttpContext.Session[SESSION_MESSAGES_NAME] as IEnumerable<Message>; }
    set { HttpContext.Session[SESSION_MESSAGES_NAME] = value; }
}

objEntity = new CmnItemSpecificationDetail();
                objEntity.ItemSpecificationDetailRecordID = hidItemSpecificationDetailRecordID.Value.ToString() == "" ? _ItemSpecificationDetail.Count + 1 : int.Parse(hidItemSpecificationDetailRecordID.Value.ToString());
                objEntity.SpecificationID = drpSpecification.SelectedIndex == 0 ? -1 : int.Parse(drpSpecification.SelectedValue);
                objEntity.SpecValue = Convert.ToDecimal(txtSpecValue.Text);
                objEntity.UOMID = drpUOM.SelectedIndex == 0 ? -1 : int.Parse(drpUOM.SelectedValue);
                objEntity.UOMID = 1;


                objEntity.Action = Entity.ActionMode.Add;
                objEntity.Action = Entity.ActionMode.Add;
                objEntity.CreateBy = LogInUser;
                objEntity.CreateOn = DateTime.Now;
                objEntity.CreatePc = PCName;
                Messages.Append(objEntity);//failed to add item




  public static class exten
    {
        public static IEnumerable<T> Append<T>(this IEnumerable<T> source, params T[] items)
        {
           return source.Concat(items);

        }
    }

此列表无法填写项目,想知道为什么无法在列表中添加项目,是什么问题,如何解决这个问题。

如果有任何疑问请询问,在此先感谢。

4

2 回答 2

1

您的Append()扩展方法不会更改原始序列。它返回一个附加了指定项目的新序列。

当您调用 时Messages.Append(objEntity),您不会对返回值做任何事情,因此您会丢弃 Append() 的结果。

要修复它,您需要对返回值做一些事情。也许只是这样做:

Messages = Messages.Append(objEntity);
于 2013-03-10T11:28:57.210 回答
1

您可能需要稍微修改一下您的 Getter。

它当前的工作方式不处理 Messages 为空(尚未初始化)的情况。

改变这个

 get { return HttpContext.Session[SESSION_MESSAGES_NAME] as IEnumerable<Message>; }

对此。

 get { var msg = HttpContext.Session[SESSION_MESSAGES_NAME] as IEnumerable<Message>;
      if(msg == null) {
          msg = new List<Message>();
         HttpContext.Session[SESSION_MESSAGES_NAME] = msg;
       }

       return msg;

    }
于 2013-03-10T11:30:22.670 回答