多対多の関係を持つ一連のテーブル (ConditionTemplate と KeyWord) があります。コードでは、特定の ConditionTemplate レコードにキーワードを追加しようとしています。残念ながら、特定の条件にキーワードを追加しようとすると、条件に関連付けられていない新しいキーワードを追加しているかのようにエラーが発生します。
私のモデルの画像:
私のコード:
グローバル変数の作成:
EnterpriseEntities EE;
ConditionTemplate myConditionTemplate;
グローバル変数をロード:
EE = new EnterpriseEntities();
EE.Database.Connection.ConnectionString = Myapp.EnterpriseEntityConnectionString;
myConditionTemplate = EE.ConditionTemplates.Where(c => c.TemplateCode == "17D").FirstOrDefault();
上記のコードは、多くのキーワードを持つ単一の条件をロードします。
利用可能なキーワードはリストボックスにあり、ユーザーはボタンを押してキーワードを選択し、条件に移動します。これはそれを処理するコードです。
foreach (KeyWord SelectedKeyWord in ListBoxAvailableKeyWords.SelectedItems)
{
KeyWord NewKeyWord = new KeyWord
{
KeyWordID = SelectedKeyWord.KeyWordID,
ID = SelectedKeyWord.ID,
Word = SelectedKeyWord.Word
};
myConditionTemplate.KeyWords.Add(NewKeyWord);
}
次に、ユーザーがボタンを押して変更を保存し、私が呼び出します
EE.SaveChanges
次に、次のエラーが表示されます。
System.Data.UpdateException: エントリの更新中にエラーが発生しました。詳細については、内部例外を参照してください。---> System.Data.SqlClient.SqlException: UNIQUE KEY 制約 'IX_KeyWord' の違反。オブジェクト 'dbo.KeyWord' に重複するキーを挿入できません。重複キー値は (ADJUDICATION) です。ステートメントは終了されました。
キーワード オブジェクトを作成するときに word プロパティ (Word = SelectedKeyWord.Word ) を設定するコードを削除すると、このエラーが発生します。
System.Data.Entity.Validation.DbEntityValidationException: 1 つ以上のエンティティの検証に失敗しました。詳細については、「EntityValidationErrors」プロパティを参照してください。
これは、単語フィールドが必要であることを示しています。