2010-02-07 86 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)。 –

相关问题