删除实体框架对象时我有一个例外

本文关键字:有一个 实体 框架 对象 删除 | 更新日期: 2023-09-27 18:31:10

我不知道到底出了什么问题,或者我应该怎么做才能正确删除对象而无一例外,所以我有问题的函数:

protected void RemoveAddDrugSurg()
{
    Surgery sur;
    DrugsList drug;
    Surgery surObject;
    DrugsList drugObject;
    try
    {
        if (Session["OldSurgs"] != null)
        {
            var SurgList = Session["OldSurgs"] as List<Surgery>;
            if (SurgList.Count > 0)
            {
                foreach (ListItem li in chlSurg.Items)
                {
                    surObject = null;
                    Int64 index = Convert.ToInt64(li.Value);
                    surObject = SurgList.Find(s => s.SurgeryID == index);
                    if (surObject == null && li.Selected)
                    {
                        sur = new Surgery();
                        sur.VisitID = Convert.ToInt64(Session["VID"]);
                        sur.SurgeryID = Convert.ToInt32(li.Value);
                        Diabetes.AddToSurgeries(sur);
                    }
                    else if (surObject != null && !li.Selected)
                    {
                        Diabetes.CreateObjectSet<Surgery>().Attach(surObject);
                        Diabetes.ObjectStateManager.ChangeObjectState(surObject, EntityState.Deleted);
                    }
                }
                Diabetes.SaveChanges();
            }
        }
        if (Session["OldDrugs"] != null)
        {
            var DrugList = Session["OldDrugs"] as List<DrugsList>;
            if (DrugList.Count > 0)
            {
                foreach (ListItem li in chlDrugs.Items)
                {
                    drugObject = null;
                    Int64 index = Convert.ToInt64(li.Value);
                    drugObject = DrugList.Find(d => d.DrugID == index);
                    if (drugObject == null && li.Selected)
                    {
                        drug = new DrugsList();
                        drug.VisitID = Convert.ToInt64(Session["VID"]);
                        drug.DrugID = Convert.ToInt32(li.Value);
                        Diabetes.AddToDrugsLists(drug);
                    }
                    else if (drugObject != null && !li.Selected)
                    {
                        Diabetes.CreateObjectSet<DrugsList>().Attach(drugObject);
                        Diabetes.ObjectStateManager.ChangeObjectState(drugObject, EntityState.Deleted);
                    }
                }
                Diabetes.SaveChanges();
            }
        }
    }
    catch (Exception ex)
    {
        throw;
    }
}

出现的例外是:

一个实体对象不能被多个 IEntityChangeTracker 实例引用。

提前谢谢。

删除实体框架对象时我有一个例外

您的代码没有显示 surObject 的来源。我的猜测是,您正在尝试将surObject附加到新的ObjectContext。如果"Diabetis"ObjectContext:您可能在HTTP请求中创建它,并且surObject(来自会话)来自以前的请求。一个实体对象一次只能附加到一个对象文本。如果要将其传输到另一个 ObjectContext,则需要先将其分离。

要删除一个对象,你应该调用 ObjectContext.DelteObject,这也应该从父集合中删除它。

最后我明白了,我为每个范围使用了关键字"using",以避免会话之间的中断。

谢谢大家的帮助:)

相关文章: