-1

EntityFrameworkを使って、MVC3と組み合わせて以下を試しています。

すべてObjectContextのリクエストの開始時に初期化され、リクエストの最後に破棄される があります。単純なUnitOfWork実装によく似ています。ここで、Order初期化されるクラス (EF 生成) があるとします。ObjectContextオーバーロードされたコンストラクターを介して使用されるを渡します。

var order = new Order(myObjectContext);

次に、Orderクラス内でこのインスタンスが保持されます (プライベート フィールド)。Orderこのインスタンスのいくつかのプロパティを設定した後(同じ を使用ObjectContext)。注文を保存する準備が整う前に、いくつかの情報を入力するために 2 番目の Web ページが必要なため、このインスタンスをユーザーのセッションに配置したいと考えています。

ユーザーが 2 番目の Web ページを送信した後、セッションからオブジェクトを取得し、さらにいくつかのプロパティを設定して、オブジェクトによる参照Orderをヒット.SaveChanges()します。最初のリクエストで作成したものです。最初のリクエスト中 (が作成されたとき) に、他のいくつかのエンティティが注文コレクションの 1 つに追加されているため、これが必要だと思います。そのため、同じコンテキストを再度使用する必要があります。問題は、メソッドをヒットした後、エラーは返されず、データがデータベースに保存されないことです。ID 値でさえゼロから変化しません。何もコミットされていません。ObjectContextOrderOrder.SaveChanges()

最初にオブジェクトをコレクションに追加しようとしたとき:

this._context.Order.AddObject(this);
this._context.SaveChanges();

このコードはメソッド内にあり、部分的な Order クラスに配置されていることに注意してください。今回は、.AddObject()次のメッセージが表示されます。

An entity object cannot be referenced by multiple instances of IEntityChangeTracker.

オブジェクトを元のコンテキストから切り離し、Order2 番目のリクエストで作成されたコンテキストに再アタッチしようとしましたが、Orderプロパティの 1 つが他のエンティティのコレクションであり、最初のリクエストで取得および追加されたため、もちろんこれは機能しません。最初のObjectContext

.SaveChanges()おそらく、最初のリクエストの最後に電話することで、この問題を解決できたでしょう。次に、次のリクエストで、そのリクエストの .xml を使用してデータベースから注文を取得する必要がありObjectContextます。Order問題は、2番目のリクエストが終了する前に保存したくないということです。

私には、セッション内ObjectContextのインスタンスに保持されているのOrderは「接続の更新」が必要なように見えますか?

4

1 に答える 1

0

何をしようとしているのかよくわかりませんが、 Order オブジェクトにいくつかの変更を加え、すべての変更が適用されたときにのみ保存した​​いようです。間違っている場合は訂正してください。ただし、ObjectContext をパラメーターとして Order オブジェクトに渡し、Order オブジェクトをセッションに配置して、接続を埋め込み、それを次のページに維持していると思いますか?

これはおそらく、エンティティ オブジェクトと ObjectContext が切断される場所です。

Self-Tracking Entity Generator - http://msdn.microsoft.com/en-us/library/ff407090.aspxをご覧になることをお勧めします。多分これはあなたを助けるでしょう - http://henrycomputerworld.blogspot.no/2012/01/save-temporary-data-with-entity.html

これにより、必要な数のポストバックを実行でき、Order インスタンスが独自の変更を追跡できるようになります。その後、単一の ObjectContext インスタンスで変更をコミットできるはずです。

これで解決しない場合は、もう少しコードと説明を提供してください。

于 2012-06-28T10:24:40.133 に答える