我使用EF1.0時出現了一個奇怪的問題......我的問題碰巧只在創作過程中,而我沒有在許多論壇的主題上找到任何內容。在創作期間使用EF 1.0
> System.InvalidOperationException: The source query for this EntityCollection or EntityReference cannot be returned when the related object is in either an added state or a detached state and was not originally retrieved using the NoTracking merge option. at System.Data.Objects.DataClasses.RelatedEnd.CreateSourceQuery[TEntity](MergeOption mergeOption) at System.Data.Objects.DataClasses.EntityCollection`1.CreateSourceQuery() at Microsoft.Data.EFLazyLoading.LazyEntityCollection`1.CreateSourceQuery() at Microsoft.Data.EFLazyLoading.LazyEntityCollection`1.LoadStubs() at mptradModel.ContextObjects.ChansonWrapper.AttachEntities(Chanson chanson, ChansonRequest request) in (SolutionDir)\ProjectWrapper\ContextObjects\ChansonWrapper.cs:line 115
什麼是真正的問題?我在創建命令期間嘗試將實體添加到另一個實體的列表時發生。
即:aCommand.Songs.Add(new Song() { Name = "SongName" });
謝謝給你們和對不起我的英語;我從魁北克來,通常說法語!
更新#1
我的行#115 chansonwrapper(其表示 「songwrapper」):
aCommand.Songs.Add(new Song() { Name = "SongName" });
更新#2
對不起,我試圖簡化代碼編寫,但我認爲它只是更令人困惑,所以這裏是我的真實代碼:
SongWrapper songWrapper = new SongWrapper(this.m_Context);
Song song = songWrapper.Load(request.SongId);
aCommand.Songs.Add(song);
我的songWrapper的this.m_Context確保我的歌曲返回到我的「aCommand」或其他實體的相同上下文中,而我可以在之後加載/之前。這部分進行了測試,所以我們知道它的工作原理。有一件事情發生了變化,那就是我們轉移到了「LazyLoading」之前我們沒有使用過的東西。更奇怪的是,更新工作正常!幫助meee:oP!
您顯示的線(myCommand.Songs.Add)真的是ChansonWrapper.cs:線115?你可以顯示所有的「ChansonWrapper.AttachEntities」並突出顯示第115行嗎? – 2009-12-01 22:00:49
我認爲你正在使用延遲加載命中角落案例。如果您在執行'aCommand.songs.Add'之前查看'aCommand.songs.Count()'*,會發生什麼?我的理論:通常做「添加」會導致新的「歌曲」被附加。但是如果你在'歌曲'(懶惰)加載之前這樣做,那不會發生。 – 2009-12-02 13:37:12
同樣,如果您在調用「添加」之前強制加載歌曲會發生什麼情況? 'aCommand.Songs.Load(); aCommand.Songs.Add(歌曲);' – 2009-12-02 18:09:29