2014-04-23 82 views
0

「學生」具有導航屬性「學校」。實體框架:更新具有相同密鑰的相關實體的2個實體

public class Student 
{ 
    public long Id; 
    public string Name; 

    public School MySchool; 
} 
public class School 
{ 
    public long Id; 
    public string Name; 
} 

客戶端程序傳入同一學校的兩個學生實體以更新數據庫。 Student.MySchool中的兩名學生是與同一個鍵的不同對象School.Id

如何更新一筆交易的兩位學生?

我的想法是將兩名學生附加到dbcontext,然後將其狀態更改爲Modified。但第二次附加失敗,出現錯誤:附加一個'School'類型的實體失敗,因爲另一個相同類型的實體已經具有相同的主鍵值。

+0

你可能會看看我的答案[ASP.NET MVC - 附加類型'MODELNAME'的實體失敗,因爲另一個相同類型的實體已經具有相同的主鍵值](http://stackoverflow.com /問題/ 23201907/ASP淨MVC附着-AN-實體的型MODELNAME失敗的 - 因爲-另一個-ENT/39557606#39557606)。 –

回答

0

一個MySchoolId屬性添加到Student,並設置基礎上,MySchool參考每個學生的MySchoolId屬性,然後將學生上下文之前設置MySchool參考空。

public long MySchoolId { get; set; } 

您可能需要檢查並瞭解學校是否已經存在於上下文中。如果沒有,則將其添加到上下文中,保存上下文,並使用該學校實體的新更新的Id來設置MySchoolId屬性的值。

或者,您可以查詢匹配學校的上下文,並將每個學生屬性設置爲來自上下文或剛剛創建的實體。

+0

謝謝!我的想法是在不修改業務對象的情況下找到一種方法,例如,在沒有附加學校的情況下附加學生。雖然我猜這在EF中是不可能的。所以接受這個答案。 – sz9

+0

英孚的實體國家管理可以採取一些習慣,但一旦明白我發現它通常是有道理的......即使它並不總是方便。 –

相關問題