我是新來的實體框架。錯誤:ObjectStateManager中已存在具有相同鍵的對象。 ObjectStateManager無法使用相同的密鑰跟蹤多個對象
我在本網站和谷歌上搜索之前,問這個問題,我到處找到不同的答案。但我的問題沒有解決,所以我問這個問題。
我在嘗試刪除記錄時遇到上述錯誤。
這裏是我的代碼:
using (Lab_Lite_Entities db = new Lab_Lite_Entities())
{
var HaemogramsCorrespondingToPatient = (from h in db.Haemograms
join m in db.MasterPatientHaemograms
on h.HaemogramID equals m.HaemogramID
where m.PatientID == SelectedPatient.PatientID
select h);
foreach (Haemogram haemogram in HaemogramsCorrespondingToPatient)
{
if (db.Entry(haemogram).State == System.Data.EntityState.Detached)
db.Haemograms.Attach(haemogram);
db.Haemograms.Remove(haemogram);
db.Entry(haemogram).State = EntityState.Deleted;
}
var entry = db.Entry(SelectedPatient);
if (entry.State == System.Data.EntityState.Detached)
db.Patients.Attach(SelectedPatient); //I get error here
db.Patients.Remove(SelectedPatient);
db.SaveChanges();
}
這裏是表之間的關係:
注:請注意,級聯刪除是在SQL Server。
編輯
我也注意到一些奇怪的事情。
當我創建一個病人,然後嘗試使用上面提到的代碼刪除CurrentPatient
對象時,出現上述錯誤。
但是,當我創建一個病人,然後重新啓動程序,然後我嘗試刪除CurrentPatient
對象,然後它被刪除沒有任何問題。
我試圖在我的項目中使用您的code1。現在我得到另一個錯誤。 該對象無法刪除,因爲它在ObjectStateManager中找不到。 – Khushi
@Khushi:你真的使用過'db.Patients.Remove(patient)',** NOT **'db.Patients.Remove(SelectedPatient)'嗎? – Slauma
對不起,現在有效。謝謝你對我很友善。 – Khushi