2010-09-09 168 views
1

我開始在VB.NET中開發我的第一個Linq to SQL項目(我也是新來的)。 我想刪除一個實體,但遇到了InvalidCastException的問題。調試器在ForEach循環中的Next語句處中斷。Linq to SQL Cast異常

我的實體類被稱爲材質。

任何幫助將非常感激。

感謝,

肯尼斯

 Dim materialsTable As Table(Of Material) _ 
       = (New DataContext("Server=.\SQLEXPRESS; Database=Materials; Trusted_Connection=yes;") _ 
        .GetTable(Of Material)()) 

     Dim materialsToDelete = (From x In materialsTable _ 
           Where x.MaterialName = aMaterial.MaterialName _ 
           Select x) 

     If (materialsToDelete Is Nothing) Then Return 
     If (materialsToDelete.Count = 0) Then Return 

     For Each m As Material In materialsToDelete 
      materialsTable.DeleteOnSubmit(m) 
     Next 

     materialsTable.Context.SubmitChanges() 
+0

我沒有看到您的代碼有任何問題。爲了簡潔起見,你有沒有遺漏什麼?是否還有其他物品與材質關聯? – MikeWyatt 2010-09-09 21:19:56

+0

不,材料是一個非常基礎的類,只有幾個屬性。 – KennethC 2010-09-09 21:23:56

+0

你能添加確切的異常消息+堆棧跟蹤嗎? – jeroenh 2010-09-09 22:46:30

回答

1

確保你確實有.ToList(運行查詢)

另外,如果你可以用一個簡單的DataContext去。我還沒有看到你在任何地方實施DC。

Dim db as new NorthwindDataContext() 
Dim materialsToDelete = (From x In db.Materials _ 
          Where x.MaterialName = aMaterial.MaterialName _ 
          Select x) 

您實際上不需要循環刪除它們。

materialsTable.DeleteAllOnSubmit(materialsToDelete) 
materialsTable.Context.SubmitChanges() 
+0

感謝您的幫助。使用.ToList()會導致該線上出現InvalidCastException .. – KennethC 2010-09-09 21:20:51

+0

@KennethC:如何顯式聲明materialsToDelete的類型?另外,請使用新的DataContext對象,而不是使用目前的方法。 – 2010-09-09 21:35:53

+0

結束恢復VS設計器和生成的上下文工作正常。 – KennethC 2010-09-11 12:59:44