2012-12-05 73 views
1

我使用EF模型首先,在我Employee類我有一個Manager酒店,擁有1對1的關係,以自身的Employee類:如何在實體框架中刪除具有1對1關係的相關對象?

public partial class Employee 
{ 
    public Employee() 
    {   
    } 

    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public virtual Employee Manager { get; set; } 
} 

現在,當我從數據庫中獲取現有對象並改變經理與:

employee.Manager = otherEmployeeInstance; 
Context.Entry(employee).State = System.Data.EntityState.Modified; 
Context.SaveChanges(); 

它工作得很好;但是,如果我想刪除的管理員,這將不起作用:

employee.Manager = null; 

在我看來,我首先需要「負載」經理(員工)的實例爲,因爲這使得背景下它的工作:

var dummyVar = employee.Manager.Id; 
employee.Manager = null; 

所以問題是,什麼是最好的(適當)的方式來刪除相關的對象?

回答

2

很明顯,當你想刪除一對一關係的實體時,EF不允許在沒有準備之前刪除它。即從該實體中刪除任何依賴實體信息。請記住,我們正在使用關係數據庫系統和任何中斷關係,而沒有任何協調導致異常和失敗。 當要刪除的關係,你可以在你的控制器使用:

employee.Remove(Manager);//Automatically Removes Navigational Properties at both entities 
db.SaveChanges(); 

取而代之的是:

employee.Manager = null; 
+0

隨着模型的第一,VS2010生成POCO對象。正如你在我的代碼中看到的,Employee不具有remove方法。我錯過了別的嗎? – Ulises

+0

不是遠程方法。但實體之間的任何關係在這裏都是相當大在這個問題中,任何設計方法(如模型優先或代碼優先)都沒有區別。確保在刪除實體之前刪除了任何相關屬性。 –

+0

你是指「在刪除實體之前確保刪除了任何相關屬性」?就我而言,我想取消關係,因爲員工可能不再是經理的下屬。但是,我不想從數據庫中刪除「管理器」實例。 – Ulises

相關問題