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 を少し変更したい場合があります。

現在の動作方法では、メッセージが null である (初期化されていない) 状況は処理されません。

これを変える

 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 に答える