2011-12-26 95 views
5

我有兩個表Employee(n)和Store(1),它們具有n:1的關係。實體框架刪除語句與參考約束衝突

Employee有外鍵idStore這是Store的主鍵。

這裏是我嘗試從Employee刪除行:

public void deleteEmployee(int idEmployee) 
{ 
    MyEntities pe = new MyEntities(); 
    try 
    { 
     var firstQuery = from e in pe.Employees 
         where e.idEmployee == idEmployee 
         select e; 
     string findIdStore = firstQuery.First().StoreReference.EntityKey.EntityKeyValues[0].Value.ToString(); 
     int idStore = Int32.Parse(findIdStore); 
     Store r = pe.Stores.First(c => c.idStore == idStore); 
     r.Employees.Remove(firstQuery.First()); 
     pe.DeleteObject(firstQuery.First()); 
     pe.SaveChanges(); 
    } 
    catch (Exception ex) 
    { 
     return; 
    } 
} 

而且,我仍然得到錯誤delete語句衝突與基準約束。

完整的錯誤是在這裏:

DELETE語句衝突與基準約束 「FK_Bill_Employee」。衝突發生在數據庫 「myDatabase」,表「dbo.Bill」,列'idEmployeeMember'。
該聲明已被終止。

回答

1

難道你不能找到並刪除員工?

public void deleteEmployee(int idEmployee) 
{ 
    using(MyEntities pe = new MyEntities()) 
    { 
     var emmployeeToDelete = pe.Employees.FirstOrDefault(e => e.idEmployee == idEmployee); 

     if(employeeToDelete != null) 
     { 
      pe.DeleteObject(employeeToDelete); 
      pe.SaveChanges(); 
     } 
    } 
} 

我不認爲你需要做的任何事情比這更,真的.....

當你加載此特定的商店員工屬於下一次,該員工將不再是在商店的員工集合 - 沒有做任何雜亂的手動刪除或任何東西....

+1

不,我不能。它說同樣的錯誤。 – 2011-12-26 16:37:04

+0

沒有。這是一個簡單的表,其主鍵不爲空。但是,如果我試圖刪除idStore = 1的員工,那麼如果在Store表中只有一行idStore = 1,那麼應該刪除它。我認爲這就是發生這種錯誤的原因。 – 2011-12-26 16:40:07

+0

{「DELETE語句與參考約束\」FK_Bill_Employee \「發生衝突。數據庫\」myDatabase \「,表\」dbo.Bill \「,列'idEmployeeMember'中發生衝突 。\ r \ n聲明已終止。「} – 2011-12-26 17:12:02

相關問題