Как использовать Linq to SQL для обновления определенных полей только сущности? - PullRequest
0 голосов
/ 29 апреля 2011

Как использовать Linq to SQL для обновления определенных полей только сущности?

Страница ASPX:

    Dim pdf As New Dashboard.Process_PDF()
    pdf.ID = ID
    pdf.Label = rtbLabel.Text
    pdf.IsShared = cbxIsShared.Checked
    pdf.AccountID = AccountID

    If RadUpload1.UploadedFiles.Count > 0 Then  '<-- Uploading a new file is optional in Update Form but is required for Insert (Insert works fine)'
        Dim imageFile As UploadedFile = Nothing
        imageFile = RadUpload1.UploadedFiles(0)
        Dim bytes() As Byte = New Byte(imageFile.InputStream.Length - 1) {}
        imageFile.InputStream.Read(bytes, 0, CInt(imageFile.InputStream.Length))
        pdf.FileName = imageFile.FileName
        pdf.FileBytes = bytes
        pdf.FileSize = imageFile.ContentLength
        pdf.ContentType = imageFile.ContentType
        pdf.UploadedBy = RUserName
    End If

    pdf.Update()

Process_PDF.vb - версия 1
Если у меня есть это (ниже), то ничего не происходит. Нет ошибок. Без обновлений.

Public Sub Update()
    dc.Process_PDFs.Attach(Me)
    dc.SubmitChanges()
End Sub

Process_PDF.vb - версия2
Если у меня есть это (ниже), то я получаю сообщение об ошибке в строке Attach:

Объект может быть присоединен как измененный без исходного состояния, только если он объявляет член версии или не имеет политики проверки обновлений.

Public Sub Update()
    dc.Process_PDFs.Attach(Me,True) '<--- ERRORS OUT HERE'
    dc.SubmitChanges()
End Sub

Process_PDF.vb - версия 3
Если у меня есть это (ниже), то оно работает отлично, ЕСЛИ я также обновляю файл, но если я не обновляю файл, я получаю сообщение об ошибке в строке SubmitChanges (независимо от того, какие настройки проверки обновления установлены):

Невозможно вставить значение NULL в столбец 'FileName' , table 'MyDbName.dbo.Process_PDFs'; Столбец не допускает пустых значений. ОБНОВЛЕНИЕ не удается. Заявление было прекращено.

Public Sub Update()
    dc.Process_PDFs.Attach(Me)
    dc.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, Me)
    dc.SubmitChanges() '<--- ERRORS OUT HERE IF NO FILE UPDATE'
End Sub

1 Ответ

0 голосов
/ 03 мая 2011

Ну, самый чистый способ - извлечь сущность, обновить поля, которые необходимо обновить, и вызвать SubmitChanges ().(Создание новой сущности и копирование атрибутов имеет недостаток, заключающийся в том, что, если к сущности добавляются новые поля, вам нужно обновить код, поэтому его нелегко поддерживать) + В любом случае LINQ требуется исходная сущность, чтобы она моглаполя, которые были обновлены ...

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