0

正確に何が間違っているのか、例外なくオブジェクトを正しく削除するために何をすべきなのかわからないので、これは私が問題を抱えている機能です:

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 の複数のインスタンスによって参照できません。

前もって感謝します。

4

2 に答える 2

0

あなたのコードは、 surObjectがどこから来たのかを示していません。私の推測では、surObjectを新しいObjectContextにアタッチしようとしています。'Diabetis' ObjectContextの場合:HTTPリクエストで作成している可能性があり、surObject(セッションから)は前のリクエストからのものです。EntityObjectは、一度に1つのObjectCOntextにのみアタッチできます。別のObjectContextに転送する場合は、最初にデタッチする必要があります。

オブジェクトを削除するには、 ObjectContext.DelteObjectを呼び出す必要があります。これにより、オブジェクトも親コレクションから削除されます。

于 2012-04-14T12:17:07.073 に答える
0

Finally I got it, I used the keyword "using" for each scope to avoid interruption between sessions.

Thank you all for the help :)

于 2012-04-15T11:35:00.710 に答える