2010-09-09 128 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