2011-05-30 67 views
1

我有3個由Employees,Departments和EmployeesToDepartments組成的規範化表。我希望能夠將一個員工分配給一個或多個部門,因此可以將鏈接表(EmployeesToDepartments)。我可以成功地查詢數據庫,並使用使用RIA服務和實體框架通過導航屬性從數據庫表中刪除實體

this.ObjectContext.Employees.Include("EmployeesToDepartments").Include("EmployeesToDepartments.Department") 

通過導航屬性提取實體的完整的層次加上[包含]屬性的元數據,從而使我訪問部門對於一個給定的僱員。試圖刪除[EmployeesToDepartments]表中的[Employee]和[Department]之間的鏈接時,我收到了一個外鍵約束錯誤。

我簡化了我的模型,在[Employees]和[EmployeesToDepartments]之間只包含一個導航屬性。 [Employees]。[ID]和[EmployeesToDepartments]之間的外鍵約束[IDEmployee]阻止我更新EmployeesToDepartments表。通過關係設置刪除,我現在可以更新表格。我現在可以執行以下代碼

foreach (var rel in _employee.EmployeesToDepartments) 
{ 
    _employee.EmployeesToDepartments.Remove(rel); 
} 

_domainContext.SubmitChanges(); 

沒有錯誤。

我期待看到RelmployeesToDepartments中的條目與IDEmployee已被刪除。我在表中看到的是IDEmployee以前的值0。

是否可以強制發佈DELETE語句?我誤解了這裏的基本概念嗎?

任何幫助將不勝感激。

回答

1

刪除導航屬性中的實體只會打破實體之間的鏈接。你必須從EntitySet中刪除,以達到你想要的。
ex) myDomainContext.EmployeeDepartments.Remove(employeeDepartmentToRemove); myDomainContext.SubmitChanges();

+0

偉大的,這是有道理的。非常感謝! – fran 2011-06-01 09:41:57