2011-12-22 8 views
1

私は完全に困惑しているEntity Framework(EF)を使用している状況に遭遇しています。私は単純な更新を行い、私が得るエラーはDataContextで更新を実行するとナビゲーションプロパティが別のエンティティを更新するのはなぜですか? (C#Entity Framework)

PRIMARY KEY制約 'PK__tblProducts_Mark__03E07F87'の違反です。オブジェクト 'healthc.tblProducts_MarketSegmentGroups'に重複キーを挿入できません。 ステートメントが終了しました。

問題の背景を教えてください。

私はWebフォームを使用しており、ボタンのクリックイベントを発生させて、ページのいくつかのテキストボックスコントロールにデータを保存しています。

私のデータベースには、tblMetaProductsというテーブルがあります。これは、扱うさまざまなベンダーの製品情報を格納するためのテーブルです。この表のエンティティーは製品と呼ばれます。

tblTechAssessmentという別のテーブルがあります。このテーブルには、ベンダーの製品に関する技術的な質問(ソフトウェアの実行可能なオペレーティングシステム、バージョン番号など)に関するデータが格納されています。このテーブルのエンティティはTechnicalAssessmentと呼ばれます。製品には多くの技術的評価があり、製品IDによって関連しています。

最終的に、製品IDと別のID(この問題については気にしない)を保持するtblProducts_MarketSegmentGroupsという名前のルックアップテーブルがデータベースにあります。このテーブルのエンティティはProductMarketSegmentGroupと呼ばれます。製品は多くの製品市場セグメントグループを持つことができ、それらは製品IDによって再評価されます。ここで

EDMX Screen Shot

は、私は自分のドメイン層までEFは

private void UpdateTechnicalAssessments(int productID) 
{ 
    var technicalAssessments = VendorDirectoryController.GetTechnicalAssessments(productID); 
    var technicalAssessmentTypes = Enum.GetValues(typeof(TechnicalAssessmentType)).Cast<TechnicalAssessmentType>(); 
    foreach (var technicalAssessmentType in technicalAssessmentTypes) 
    { 
     var typeName = technicalAssessmentType.ToString(); 
     var id = "SaveToProduction" + typeName + "TextBox"; 
     var results = ProductInformationPanel.FindDescendantsByType<TextBox>().Single(x => x.ID == id).Text; 
     technicalAssessments.Single(x => x.QuestionID == (int)technicalAssessmentType).Results = results; 
    } 

    VendorDirectoryController.SaveChanges();    
} 

にSaveChangesメソッドを保存()メソッドドリルを実行するために実行していたコードであるとdataContext.SaveChanges()メソッドを呼び出します。

だから私の質問は以下のとおりです。

1)私は、これは私のTechnicalAssessmentエンティティを保存するために取得するために何ができますか? 2)保存がProductMarketSegmentGroupエンティティに影響するのはなぜですか?

答えて

0

私が解決したのは、私たちのデータベース管理者にアップデート用のprocを作成させることでした。私はナビゲーションプロパティがそのような騒ぎを引き起こしていた理由を理解することはできませんでした。

関連する問題