2009-03-25 14 views
0

私はデータベースからのデータを持っているユーザーコントロールを持っています。ユーザーは、さまざまな方法でデータを操作できます(CRUD)。データを操作するプロセスは、サーバー側のイベントを引き起こす可能性があります。次に、一時的なデータを最終的に処理し、データベースに書き込む保存ボタンがページにあります。一時的な記憶域を操作するための洗練された方法 - ASP.NET

私はこれに優雅なアプローチを探しています。私の考え方は次のとおりです。隠れ変数を使用し、負荷に

  • と(カスタムデータ構造の形でその時点で)データをシリアル化JSON
  • に操作任意のイベント(サーバ側/クライアント側)データ、デシリアライズ、操作を実行すると、このすべてがASCXで起こっているので、それが最初のようにロードされ、データベース

を打ったことをデータ構造にデシリアライズ、保存最終的にはバック

  • 隠れ変数にserialze。 CS、私は本当にクールなOOPのものを使用することはできません(多態性の場合は将来、彼らはこれらの操作を一時的な記憶域ではなくデータベースに行うべきだと判断します)

    これらの操作ごとに1つのメソッドを持つ静的メソッドを持つクラスのアプローチにかなり悩まされています。コードの背後には、処理する必要のあるイベントがあるときにデータをシリアル化/デシリアライズする必要があります。

    EDIT-Any help?

  • 答えて

    0

    これを行う最も簡単な方法は、ページを最初に読み込んだときにビューステートにオブジェクトを保存し、ユーザーがそれを操作した後に保存したいときにデータベースに保存することです。

    しかし、このアプローチの問題の1つは、複数のユーザーが同じアイテムを同時に編集すると、データが上書きされるという状況に陥る可能性があるということです。

    例:

    1)ユーザーAがページを読み込んで変更を開始します。 2)ユーザーBがページを読み込んで変更を開始します。 3)ユーザーAが保存を​​押します。変更がデータベース に保存されます。4)ユーザーBが保存を押します。変更はデータベースに保存され、ユーザーAの変更が上書きされます。

    これを回避するには、タイムスタンプを使用して最後の更新日時を保存し、それをビューステート内の日付と時刻と比較してから、udpateをコミットします。あるいは、誰かが編集を開始したときにアイテムをロックして、2人のユーザーが同時に変更をやめないようにすることもできます(たとえば、編集中にユーザーがページから離れた場合など)。

    1

    ADO.Net。 メモリのデータ構造では、プロセスの最後にコミットするだけです。

    +0

    ADO.NET構造体では、データセットを意味すると見なします。これらの操作はクライアント側またはサーバー側で発生する可能性があるため、ViewstateオブジェクトでDSを永続化するのと同じ方法を使用する必要があります。 – DotnetDude

    +0

    1つの場所を選択します。クライアントとサーバーではありません。 サーバーに情報を送り返し、サーバー上でモデルを更新し、変更されたローカル変数をその呼び出しから戻して格納する必要があります。そうすれば、データ操作用のコードベースを1つだけ維持しています。 –

    関連する問題