2010-09-09 4 views
1

Я начинаю свой первый проект Linq to SQL в VB.NET (который я также новичок). Я пытаюсь удалить сущность, но у меня возникают проблемы с InvalidCastException. Отладчик разбивается на оператор Next в цикле ForEach.Linq to SQL Cast Exception

Мой класс сущности называется Материалом.

Любая помощь будет очень оценена.

Спасибо,

Кеннет

 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

+0

Нет, материал - это очень простой класс с несколькими свойствами. – KennethC

+0

вы можете добавить точное сообщение об ошибке + трассировку стека? – jeroenh

ответ

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

+0

@KennethC: как насчет явного объявления типа материаловToDelete? Кроме того, перейдите к новому объекту DataContext, а не к вашему текущему подходу. –

+0

Закончился возврат назад конструктора VS, и сгенерированный контекст работает нормально. – KennethC