問題タブ [objectstatemanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
20835 参照

entity-framework - デタッチされたエンティティをアタッチできません:「同じキーを持つオブジェクトがすでにObjectStateManagerに存在します」

ObjectContextにエンティティをアタッチしようとしています。これを行うと、次のInvalidOperationExceptionがスローされます。

オブジェクト状態マネージャーをチェックインしましたが、アイテムが存在しません。

または、この抽象的な例を見て、それが理にかなっているかどうか教えてください。

VBでの回答も歓迎します。

0 投票する
1 に答える
1672 参照

entity-framework - 「Include」を使用してクエリを実行する場合、EF はオブジェクトがオブジェクト状態マネージャーに既に存在するかどうかを確認しますか?

クエリでインクルードを使用しないようにする必要がありますか?それとも、クエリを作成するときに OSM に既に存在するクエリ項目から除外する EDM に頼ることができますか?

0 投票する
4 に答える
29003 参照

entity-framework - ObjectContext.Refresh()?

データ ストアからすべてのダーティ エンティティを更新し、変更された値を元のストア値にリセットする方法は?

メソッドObjectContext.Refreshは、更新するエンティティをパラメーターとして必要とします。

0 投票する
1 に答える
675 参照

asp.net-mvc - ページを離れるときに ObjectStateManager エントリの削除を強制する

Shoulders of Giantsに基づいて編集された RESTful ウィザードがあります。ASP.Net MVC を使用した RESTful ウィザード…おそらく?. このウィザードには CANCEL ボタンがあり、これを押すと以下のコードが実行されます。

ここで、キャンセル ボタンの後にSaveChanges()を呼び出せるようにするには、ウィザードのエントリを ObjectStateManager から手動で削除する必要があります。ただし、手動でホームページに戻ってウィザードをキャンセルすると、ウィザードはそのまま残り、次の _entities.SaveChanges() の呼び出しでは、ウィザードの進行状況からデータベースにオブジェクトを保存できないという例外がスローされます。オブジェクト状態で。

ウィザードのステップ間では、データベースに何も保存しないことに注意してください。私はそれをセッション状態に保ち、各ステップを取得します:

ただし、どういうわけか、inProgressVacancyWizard.Vacancy は ObjectStateManager に表示されるため、削除する必要があります。そうしないと、別のオブジェクトに対して _entities.SaveChanges() が呼び出されている間に、不完全な Vacancy モデルに関するエラーが発生ます。

この問題をカバーする方法はありますか?

//編集 いくつか読んだ後、リポジトリの基盤が良くないことがわかりました。ここにあるように。現在、同じ記事の「ビジネス トランザクションごとに 1 つの ObjectContext インスタンス」に記載されているオプションを実装するかどうかは疑問です。それは賢明なことでしょうか。主要なリファクタリングになるので、もう少し詳しく聞きたいです。

0 投票する
1 に答える
1311 参照

c# - Entity Framework 4(純粋なPOCO)でのUPDATE操作の問題

純粋なPOCOで実装されたEntityFramework4.0モデルがあります(コード生成なし、自己追跡エンティティなし、単純な古いCLRオブジェクトのみ)。

さて、これが私がUPDATEを実行するために私のUIに持っているいくつかのコードです:

基本的に、強い型のPersonオブジェクトを受け入れるアクションメソッドがあり、このエンティティを更新する必要があります。

エラーは発生しませんが、DBへの変更も保持されません。:(

作業ユニットの「コミット」中にEntityStateを検査すると、次のようになります。

EntityState.Unchangedでエンティティが表示されます。

それで、それが持続されなかった理由を説明します。私の検索、追加、削除操作は正常に機能しています(正しく持続しています)。しかし、UPDATEは機能していないようです。

オブジェクトの状態を手動で設定する必要があるというスレッドをいくつか見つけました。

あれは正しいですか?このロジックはどこに置きますか?作業単位の操作として公開しますか?

明らかに問題は、純粋なPOCOを使用しているため(EntityObjectの派生、INotifyPropertyChangingの実装がないため)、変更の追跡がまったくないことです。

しかし、私は今までそれに関する問題を見つけていません。

私は何が間違っているのですか?

0 投票する
1 に答える
1871 参照

asp.net - EntityDataSource NullUpdatePametersがModifiedとマークされない

VB.NETアプリケーションのFormViewでEntityDataSourceを使用しています。FormViewには、複数のタブを持つAjaxControlToolKitTabContainsが含まれています。各タブがネーミングコンテナであるため、バインドは値を更新するために正しく機能しません(stackoverflowの他の投稿を読んで発見されたように)。代わりに、EntityDataSourceでUpdateParametersを宣言する必要があります。マークアップの例は次のとおりです。

これは、顧客が編集されて名前が何も設定されない限り、うまく機能します(この場合、null名が許可されていると仮定します)。Name UpdateParameterはNullに設定されていますが、以前にエンティティに値が指定されていたとしても、ObjectStateEntryはNullプロパティに対して変更されるように設定されていません。名前がNull以外に変更されている限り、すべてが正しく更新されます。

EntityDataSourceのUpdateingイベントに次のコードを配置することで、回避策を見つけました。

これにより、UpdateParametersの各プロパティの状態が変更済みに設定されていることを確認します。それは機能しますが、それはハックのようであり、私はそれが将来的に問題を引き起こしているのを見ることができます。他に何かできることはありますか?

0 投票する
3 に答える
20751 参照

entity-framework - EF 4.1でdbcontextエンティティを介してForeachするにはどうすればよいですか?

ASP.NET Entity Framework 4.1 MVC 3(C#)を使用しています

DbContext内のすべてのエンティティを介してforeachしたいと思います。動的ビューを作成するには、エンティティを動的に参照できる必要があります。

Lermanの本、2冊のMVC(2&3)の本、msdn、asp.netなどを読んだことがあります。何かが足りないのではないでしょうか。

エンティティにアクセスするには、ObjectContextを使用する必要があるようです。それが正しい方法であるならば、私は確かにそれをする方法を理解することができません。助けてください。ありがとうございました。

0 投票する
1 に答える
2658 参照

ef-code-first - EntityFrameworkコードの最初のDBContextObjectStateManagerエラー

エラーが発生しました" An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key."

CheckIfNameChanged(TestObject testObject)メソッドを呼び出すときに、ObjectContextにエンティティキーを追加し、_unitOfWork.TestObjectRepository.Update(testObject)を呼び出すときにコードをアタッチまたは編集するときに、次のことを知っています。

ここで競合が発生し、ObjectStateManagerで2つの同じエンティティキーを取得しました。コンテキストに移動してエンティティをデタッチせずにこの問題を解決する方法はありますか、それとも他の方法がありますか?そして、コンテキストからエンティティを切り離すための最良の方法は何ですか?

0 投票する
1 に答える
2339 参照

entity-framework - MVC3: リポジトリの更新と ObjectStateManager

プロジェクトの記事を更新するために使用しているUpdateメソッドがリポジトリにあります。私は当初、記事の管理者編集を実行するためだけにこの方法を使用していました。それは正しく処理されますが、「最も読まれた」記事を計算するための簡単なメカニズムを追加することにしました。TimesReadそのためには、記事が表示されるたびにプロパティを更新したいと考えています。これにより、 の使用を中心に展開しているように見える更新で問題が発生していますObjectStateManager.ChangeObjectState。これが私のUpdate方法です:

AdminControllerの次のメソッドは正しく更新されます:

ただし、このTimesReadシナリオでは、更新によって次の例外がトリガーされます。

オブジェクトは既にオブジェクト コンテキスト内にあるため、アタッチできません。オブジェクトは、変更されていない状態にある場合にのみ再接続できます。

そのコントローラーメソッドからの関連コード:

これを解決するために何ができるかを見て回った後、このSOの質問に対する答えに出くわしました。Updateそのため、メソッドを提案されたコードに置き換えることで、その答えを実装しました。これは、私の管理シナリオでも正しく機能しますが、TimesReadシナリオでは機能しません。次の例外がスローされます。

同じキーを持つオブジェクトが ObjectStateManager に既に存在します。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。

例外の意味は非常に明確ですが、このような単純な更新をどのように処理すればよいのか疑問に思います。EntityState.Unchanged私は、設定によってモデルが変更されていないと考えるようにEFを「騙す」ことができることを発見しましTimesReadObjectStateManager

また、これらのシナリオがどのように異なるかは明らかです。このアクションは、ViewModel のプロパティをアタッチされていない新しいオブジェクトにEditマッピングしますが、コンテキストから直接取得したオブジェクトを処理します。そのため、これらのコントローラー メソッドの 1 つをリファクタリングして、更新の手順を同じにする必要があると感じています。両方のアプローチが共存できるように見えるので、どのようにアプローチする必要があるのか​​ よくわかりません。私の質問は、両方のタイプの更新が正しく機能するようにするには、何を変更すればよいですか?ArticleArticleController

お時間をいただきありがとうございます。投稿されたコードの量については本当に申し訳ありません。私はそれがすべて問題に関連していると感じています。

0 投票する
1 に答える
2544 参照

entity-framework - ObjectStateManagerと分離されたエンティティの状態

私はEntityFrameworkを使用していますが、その機能の一部がまだ不明です。理解しにくい主なものは次のとおりです。

  • SubmitChanges処理する;
  • update-delete-insertメソッドを呼び出す順序。
  • の理解ObjectStateManager
  • 切り離さEntityStateれ、提出プロセスの一部です。

説明を提供するか、いくつかの役立つリンクを提供してください。