我最近收到客戶的錯誤報告,並沒有解決它的問題。我希望有人能給我一些見解,看看可能是錯的。使用Linq2SQL刪除記錄時出錯
誤差看起來很簡單:
Csla.DataPortalException:DataPortal.Delete失敗(System.InvalidOperationException:序列含有System.Linq.Enumerable.SingleOrDefault [TSource](IEnumerable`1源多於一個的元件)
這裏是我的DataPortal_Delete方法,它接受的fileid(PK)作爲參數。
private void DataPortal_Delete(SingleCriteria<File, Guid> criteria)
{
using (var ctx = ContextManager<Ronin.Data.RoninDataContext>
.GetManager(Database.ApplicationConnection, false))
{
var data = ctx.DataContext.Files
.Single(row => row.FileId == criteria.Value);
ctx.DataContext.FileSources.DeleteAllOnSubmit(data.FileSources);
ctx.DataContext.Files.DeleteOnSubmit(data);
ctx.DataContext.SubmitChanges();
}
}
我檢查的第一件事就是看看是否有具有相同的fileid再創紀錄(儘管是初步的ry鍵,這應該是不可能的)。所有的FileId實際上都是獨一無二的。我啓動了連接到客戶端數據庫的應用程序,並試圖刪除該記錄,並且沒有任何問題。客戶端的IT人員使用「問題步驟記錄器」向我發送用戶所採取行動的逐步截圖。沒有什麼不尋常的,當他使用不同的機器時,他能夠毫無錯誤地刪除記錄。顯然,這隻發生在Windows 7中運行應用程序。
這就是說,有什麼想法可能是造成這種情況?
Files.FileId是該表上的主鍵? – 2010-01-19 22:40:35
你確定錯誤是由這段代碼產生的嗎?該錯誤引用SingleOrDefault,但函數使用Single。 – gfrizzle 2010-01-21 21:52:13
FileSources是否爲空?如果這些是不同的對象,那麼在你刪除它們之前你不需要使用include來獲取它們嗎? – awright18 2010-02-20 02:13:37