Entity Framework 4にマッピングされているテーブルが、他のいくつかのテーブルの子テーブルです。そのテーブルの行を削除しようとするたびに、以下のメッセージが表示されます。このテーブルには他のテーブルへの複数の外部キーがありますが、関係の子テーブルは常にプライマリではありません。このメッセージは、私がcontext.DeleteObject(オブジェクト)を呼び出すとすぐに発生し、呼び出されたcontext.SaveChanges()は必要ありません。すべての関係が.edmxデザイナで正しく定義されていることを確認しました。Entity Frameworkでの削除に関する問題
メッセージ: 操作が失敗しました:1つ以上の外部キーのプロパティがnullにできないため、関係を変更できませんでした。リレーションシップが変更されると、関連する外部キー・プロパティーはNULL値に設定されます。外部キーがNULL値をサポートしていない場合は、新しい関係を定義する必要があります。また、外部キー・プロパティーに別の非NULL値を割り当てる必要があります。
テーブルプロジェクトごとに
Project (1) - (many) ProjectMember (many) - (1) Employee
ProjectID (PK) ProjectMemberID (PK) EmployeeID (PK)
ProjectName (varchar) ProjectID (FK) FirstName (varchar)
EmployeeID (FK) LastName (varchar)
Role (varchar)
、私は会社の従業員のリストから来る複数のProjectMembersを持っています。 ProjectMemberを削除すると、ProjectまたはEmployeeテーブルのいずれにも影響しません。
リレーションシップが存在しなければならないため、FKをヌル可能にしたくありません。
削除はWPF 4データグリッドから行が削除されたときに発生します。私は、削除キーを傍受し、context.DeleteObject()を呼び出します。
CommandManager.AddPreviewExecutedHandler(grid, new ExecutedRoutedEventHandler(gridDeleteCommandHandler));
private void gridDeleteCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
if (e.Command == DataGrid.DeleteCommand)
{
if (grid.SelectedItem is ProjectMember)
{
ProjectMember pm = (ProjectMember)grid.SelectedItem;
_context.DeleteObject(pm);
SaveChanges();
}
}
e.Handled = true;
}
なぜエラーが発生しているのか、どのように削除が機能するのですか?子に依存する行がない場合、プライマリテーブルからの削除に問題はありません。
スキーマ定義の関連部分を提供できますか? – StriplingWarrior
私はより多くの情報で投稿を更新しました。他に何かが必要な場合は、私に知らせてください。 – Doug