2010-02-07 85 views
3

嘗試從數據庫中刪除記錄時出現錯誤。LINQ to SQL Sequence包含多個元素

這裏是我當前的刪除代碼:

Dim BAToRemove = From i In uDC.BookAuthors _ 
         Where i.authorID = intAuthorID _ 
         And i.bookID = intBookID _ 
         And i.main = "N" _ 
         Select i Take (1) Distinct 

     If BAToRemove.Any Then 
      Dim ba As BookAuthor = BAToRemove.First 
      uDC.BookAuthors.DeleteOnSubmit(ba) 

      Dim cs As ChangeSet = uDC.GetChangeSet 

      uDC.SubmitChanges(ConflictMode.ContinueOnConflict) 

      If cs.Deletes.Count = 1 Then 
       Return True 
      Else 
       Return False 
      End If 
     End If 

這是順藤摸瓜,試圖得到它的工作後的代碼。即使沒有.First和Take(1)不同,查詢絕對只返回單個結果。我已經使用了BAToRemove.Count,並且還手動檢查了表格,並且只有一個匹配的行。

BookID和AuthorID都是主鍵。

我也試過在DeleteOnSubmit中只使用BAToRemove.First直。

我也嘗試複製返回的對象的所有元素到一個新的對象,然後附加和刪除,但我得到的錯誤,該元素已經存在(它)。

我對這個問題已經建立的所有其他帖子總是似乎是使用SingleOrDefault,我沒有使用,所以我難住這一個。

任何想法?

回答

3

你可以嘗試調用DeleteAllOnSubmit(ba)並檢查在SQL服務器分析器中執行什麼,這應該讓你知道什麼是錯誤的。

+0

更改爲DeleteAllOnSubmit(ba)會給出以下設計時錯誤: 方法'Public Sub DeleteAllOnSubmit(Of TSubEntity As TEntity)(entities As System.Collections.Generic。「)中的類型參數的數據類型。 IEnumerable(Of TSubEntity))'不能從這些參數中推斷出來。 如果我使用DeleteAllOnSubmit(BAToRemove.First),那麼它似乎工作正常,沒有錯誤。這真的很煩人,因爲我發誓我曾嘗試過。 當嘗試了很多解決方案來解決錯誤時,有時候很難記住你嘗試過哪些方法! – hermiod

+0

我有同樣的問題,並在我的情況發現原因 - [看我對另一個問題的回答](http://stackoverflow.com/a/17150062/463828)。 –

相關問題