我有一張表映射到實體框架4,即子表到其他幾個表。任何時候嘗試刪除該表中的一行,我都會看到下面的消息。此表有多個外鍵給其他表,但它始終是關係中的子表,而不是主鍵。這個消息一旦我調用context.DeleteObject(object)就會發生,它不需要調用context.SaveChanges()。我已驗證所有關係在.edmx設計器中正確定義。實體框架中的問題刪除
消息: 操作失敗:由於一個或多個外鍵屬性不可空,因此無法更改關係。當對關係進行更改時,相關的外鍵屬性將設置爲空值。如果外鍵不支持空值,則必須定義新的關係,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。
表
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表。
我不想讓FKs爲空,因爲關係必須存在。
刪除操作在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 2011-01-07 18:38:55