Заявление LINQ не обновляет базу данных? - PullRequest
0 голосов
/ 16 июля 2010

У меня есть следующий код:

        Dim dbHousing As New dcHousingDataContext
    Dim pullresidents = From p In dbHousing.webResidents _
                Select p.dorm_building, p.dorm_room, p.occupantnum _
                Order By dorm_building, dorm_room
    Dim j as integer = 1
    Dim previous As String = ""
    For Each row In pullresidents
        If previous = "" Then
            Dim wResident As New webResident
            wResident.occupantnum = j
            dbHousing.SubmitChanges()
            j = j + 1
            previous = row.dorm_building & " " & row.dorm_room
        Else
            If previous = row.dorm_building & " " & row.dorm_room Then
                Dim wResident As New webResident
                wResident.occupantnum = j
                dbHousing.SubmitChanges()
                j = j + 1
            Else
                Dim wResident As New webResident
                j = 1
                wResident.occupantnum = j
                dbHousing.SubmitChanges()
                j = j + 1
                previous = row.dorm_building & " " & row.dorm_room
            End If
        End If

    Next

Когда я запускаю его, глядя на отладчик, все выглядит нормально, но когда я проверяю таблицу базы данных, она должна вставляться в нее - значения столбца (для занимаемого объекта) не изменились - все они все еще равны нулю!

Не уверен, если это связано, но обратите внимание, что я теперь обновил j, чтобы явным образом быть целым числом. Во время отладки я заметил, что wResident.occupantnum показывался как "Integer?" - но это, кажется, не имеет никакого значения - когда я запускаю его снова, он все еще говорит: «Integer?»

Ответы [ 4 ]

2 голосов
/ 16 июля 2010

Я думаю, что вы делаете слишком много здесь.

Вы просто хотите изменить строку, правильно?

Попробуйте сделать это:

Dim wResident As New webResident 
wResident.occupantnum = j 
dbHousing.SubmitChanges() 
j = j + 1 

в это:

row.occupantnum = j 
dbHousing.SubmitChanges() 
j = j + 1
2 голосов
/ 16 июля 2010

Вы перебираете все извлеченные объекты с помощью For Each row In pullresidents, но никогда не изменяете row.Таким образом, нет изменений, которые можно было бы отправить обратно в базу данных.

1 голос
/ 16 июля 2010

Дейв, вам нужно сначала вставить новые объекты webResident в таблицу, прежде чем вносить изменения.

dbHousing.webResidents.InsertOnSubmit (webResident);

1 голос
/ 16 июля 2010

Простите, если это неправильно - но разве вам не нужно связывать вновь созданные объекты "webResident" с контекстом, если вы хотите их сохранить?Я не вижу, как dbHousing.SubmitChanges () может сохранить webResidents, о которых он не знает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...