錯誤:“IEntityChangeTracker的多個實例無法引用實體對象”

ado.net-entity-data-model asp.net-mvc entity-framework linq-to-entities

我目前正在ASP.Net MVC項目中使用存儲庫模式,並具有以下代碼:

    partial class Timesheet : ITimesheet
        {
            TimeSystemDBEntities _db;

            public Timesheet()
            {
                _db = new TimeSystemDBEntities();
            }
            .
            .
             //More Methods
            .
            .

            //Save WorkWeek to database
            private void SaveWorkWeek(WorkWeek wk)
                {
                    //Creating a new test context in attempt to resolve
                    //Error: “An entity object cannot be referenced by multiple instances of IEntityChangeTracker"
                    var testContext = new TimeSystemDBEntities();
                    var newWorkWeek = new WorkWeek();
                    var newStudent = new Student();
                    //Copy contents of wk to newWorkWeek
                    newWorkWeek.Students = newStudent.GetStudent(wk.Students.id);
                    newWorkWeek.MonDate = wk.MonDate;
                    newWorkWeek.MonHours = wk.MonHours;
                    newWorkWeek.TuesDate = wk.TuesDate;
                    newWorkWeek.TuesHours = wk.TuesHours;
                    newWorkWeek.WedDate = wk.WedDate;
                    newWorkWeek.WedHours = wk.WedHours;
                    newWorkWeek.ThursDate = wk.ThursDate;
                    newWorkWeek.ThursHours = wk.ThursHours;
                    newWorkWeek.FriDate = wk.FriDate;
                    newWorkWeek.FriHours = wk.FriHours;
                    newWorkWeek.TempSave = wk.TempSave;

                    testContext.AddToWorkWeek(newWorkWeek); //Exception thrown here
                    testContext.SaveChanges();

                    //Also tried
                    //_db.AddToWorkWeek(newWorkWeek); //Exception thrown here
                    //_db.SaveChanges();

                    //Also tried
                    //_db.detach(wk): //Different exception thrown here: Says it's not in ObjectStateManager
                    //_db.AddToWorkWeek(newWorkWeek); 
                    //_db.SaveChanges();

                    //Also tried
                    //_db.detach(wk.Students): //Different exception thrown here: Says it's not in ObjectStateManager
                    //_db.AddToWorkWeek(newWorkWeek); 
                    //_db.SaveChanges();

                }

    }

Student和WorkWeek課程分別處於1對多的關係中。我已經嘗試了從分離到創建全新上下文的所有內容,如上面的示例代碼中所示,並且無法保存對象。當我嘗試分離時,它基本上說它不在ObjectStateManager中,我解釋為沒有什麼可以分離,如果是真的,它似乎與原始錯誤相矛盾。我不確定發生了什麼,感謝任何幫助。

一般承認的答案

@Craig,謝謝我實際上已經查看了這些鏈接及其解決方案,並試圖實現它們但沒有成功。

以下鏈接為我提供了我的問題的解決方案,還提供了有關與實體框架有關的其他雜項問題的其他非常有用的信息。

實體框架陷入困境


熱門答案

我是MVC和實體框架工作的新手。經過多次戰鬥後我遇到了同樣的問題這個解決方案對我有用。希望它對你們有用。

var mediaItem = db.MediaItems.FirstOrDefault(x => x.Id == mediaItemViewModel.Id);
    mediaItem.Name = mediaItemViewModel.Name;
    mediaItem.Description = mediaItemViewModel.Description;
    mediaItem.ModifiedDate = DateTime.Now;
    mediaItem.FileName = mediaItem.FileName;
    mediaItem.Size = KBToMBConversion(mediaItemViewModel.Size);
    mediaItem.Type = mediaItem.Type;

//db.Entry(mediaItem).State = EntityState.Modified;// coment This line
db.SaveChanges();

因為您正在從db讀取整個對象並將其保存在當前上下文中,並且當您嘗試修改實體狀態時,它會告訴您已經有一個實體附加到當前上下文。只需調用保存更改,它將保存它。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因