ホームページ > バックエンド開発 > C++ > 「プライマリキー値の重複のためにエンティティの添付が失敗する」ASP.NET MVCのエラーを解決する方法は?

「プライマリキー値の重複のためにエンティティの添付が失敗する」ASP.NET MVCのエラーを解決する方法は?

Patricia Arquette
リリース: 2025-01-30 08:16:10
オリジナル
1044 人が閲覧しました

How to Resolve

トラブルシューティングASP.NET MVCにエンティティを添付するときのプライマリキーエラーの重複エンティティの状態を

を使用して

に更新すると、問題が頻繁に発生します。 調査により、認可またはデータの検索に責任を負う個別の機能が、状態の更新の前に同じエンティティ

を事前ロードすることがよくあることが明らかになりました。 このプリロードプロセスは、エンティティが分離される可能性があり、その後の

操作は、フレームワークが複製を追加しようとしていると考えているため失敗します。 EntityState.Modifiedソリューションには、プレロード機能がロードされたエンティティの追跡を防ぐことが含まれます。 これは、エンティティフレームワーククエリでdb.Entry(entity).State = EntityState.Modifiedメソッドを使用することで実現できます。 問題のある関数の次の例を考えてみましょう:Attach

この関数はエンティティをロードし、コンテキストによって追跡可能になります。 これを修正するには、機能を変更してAsNoTracking()

を使用します

canUserAccessA

を使用すると、ロードされたエンティティがコンテキストによって追跡されないようにし、その後の

1

2

3

4

5

6

7

8

// Problematic function - loads and tracks the entity

private bool canUserAccessA(int aID)

{

    int userID = WebSecurity.GetUserId(User.Identity.Name);

    int aFound = db.Model.Where(x => x.aID == aID && x.UserID == userID).Count(); // Tracks the entity

 

    return (aFound > 0);

}

ログイン後にコピー
または

操作との競合を防ぎます。 AsNoTracking()を使用して

を使用すると、より単純に見えるかもしれませんが、データベースとコンテキストの構成に応じて効果がない場合があることに注意してください。 提供されたクエリは、より堅牢なアプローチを提供します

1

2

3

4

5

6

7

8

// Corrected function - loads the entity without tracking

private bool canUserAccessA(int aID)

{

    int userID = WebSecurity.GetUserId(User.Identity.Name);

    int aFound = db.Model.AsNoTracking().Where(x => x.aID == aID && x.UserID == userID).Count();

 

    return (aFound > 0);

}

ログイン後にコピー
この変更により、重複した主要な重要な問題が効果的に解決され、ASP.NET MVC開発における同様の問題に対する信頼できるソリューションが提供されます。

以上が「プライマリキー値の重複のためにエンティティの添付が失敗する」ASP.NET MVCのエラーを解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート