私は完全に困惑している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によって再評価されます。ここで
は、私は自分のドメイン層まで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エンティティに影響するのはなぜですか?