1

4 つのステップを持つウィザードを備えた Web フォームを開発しています。

各ステップで、データベースから生成された新しいエンティティを作成しています。

問題は、ウィザードであるユーザーが、格納される値を生成するコントロールのプロパティを変更できることです。

そのため、作成したエンティティ オブジェクトを解放するか、そのエンティティ値をデータベースに格納されている元の行に戻す必要があります。

これどうやってするの。

作成された各エンティティ オブジェクトを null に設定すると機能するはずですか?

ちなみに私はこんな感じです。

entities = new Entities();

...

Client client = new Client();
client.name = tbxName.text

...

entities.SaveChanges();
entities.Connection.Close();   

したがって、このコードが 3 つの部分からなるウィザードの 2 番目のウィザード部分で実行され、クライアント作成が複数回実行されると、このセットを何度も前後に移動する場合、私の問題があります。

では、どうすれば作成を解除できますか:-P

ありがとう!!!

4

3 に答える 3

4

ウィザードを構築している場合は、単一の操作として管理する必要があります。これは、構築されたエンティティ グラフをセッションに保存し、ウィザード全体が完了して確認された場合にのみ保存する必要があることを意味します。また、ステップ ロジックは、関連するデータがエンティティ グラフに既に存在するかどうかを確認し、新しいデータを作成する代わりにそれらを使用する必要があります。

于 2011-04-11T08:36:37.653 に答える
0

これは私がそれをする方法です:

1-セッション変数を管理できる場所を作成します。

public class SessionObjects { }

2- ObjectContextをセッションに保存するので、前述のクラスでそれを管理するためのプロパティを作成します。

public static ObjectContextEntities ObjectContextEntities
{
    get
    {
        return (ObjectContextEntities)HttpContext.Current.Session["ObjectContextEntities"];
    }
    set
    {
        HttpContext.Current.Session["ObjectContextEntities"] = value;
    }

}

3-ウィザードの開始時にObjectContextを初期化し、終了時に破棄します。

void StartWizard()
{
    SessionObject.ObjectContextEntities = new ObjectContextEntities(); 
}

void StartWizard()
{
    SessionObject.ObjectContextEntities = new ObjectContextEntities(); 
}

void EndWizard()
{
    ((ObjectContextEntities)SessionObject.ObjectContextEntities).Dispose();
}

4-ウィザードの結果をデータベースに保存するには、次のコマンドを呼び出すことができます。

void SaveWizard()
{
    ((ObjectContextEntities)SessionObject.ObjectContextEntities).SaveAllChanges();
}

5-ウィザードをリセットするには、EndWizardを呼び出してからStartWizardを呼び出します。

ObjectEntityオブジェクトとObjectContextを管理する方法を知っていると思いますので、ここから自分で続行できます。

于 2011-04-19T21:53:03.760 に答える
0

Entity Framework を使用している場合は、Unit Of Work パターンを実装してみませんか? ウィザードの各部分で UoW が構築され、「最終ステップ」で作業単位がコミットされます。

数年前の MSDN マガジンに、 「 The Unit Of Work Pattern And Persistence Ignorance 」という記事があり、その概念が説明されていました。

于 2011-04-19T20:22:29.010 に答える