linqtosql не разрешит обновление полей, так как оно делает их доступными только для чтения. - PullRequest
1 голос
/ 18 декабря 2008

У меня проблема с обновлением linq в linqtosql

из кода ниже

Dim lqPatientTable As New lqHospitalDataContext
    Dim strPatientId As String
    strPatientId = Me.ucboPatientInfo.SelectedRow.Cells(5).Value

    Dim lqPatientName = (From lqp In lqPatientTable.Patients _
                             Where lqp.PatientID = strPatientId _
                             Select lqp.FirstName, lqp.LastName)
    For Each row In lqPatientName
        row.LastName = utxtPatientLastName.Text
        row.FirstName = utxtPatientFirstName.Text
    Next
    lqPatientTable.SubmitChanges()

Visual Studio сообщает мне, что row.LastName только для чтения. Я нигде не выполнил это присвоение и не вижу, в чем проблема.

Ответы [ 5 ]

2 голосов
/ 18 декабря 2008

Когда вы выбираете только отдельные поля, вы создаете анонимный тип на лету, который больше не является частью механизма отслеживания / обновления изменений ORM.

Вам нужно будет изменить выбранную часть на «Select lqp», чтобы это работало.

1 голос
/ 18 декабря 2008

Вы присваиваете row.LastName в первой строке цикла «Для каждого».

Вы копируете с включенным или выключенным параметром строго / явно? Если опция строгая в этой строке не должна компилироваться.

Причина, по которой вы видите это, заключается в том, что при создании анонимного типа для запросов, которые содержат явное предложение Select, все свойства результирующего типа будут доступны только для чтения. Это имеет тот же эффект, как если бы все свойства были объявлены для анонимного типа с использованием поля Key. Например

Dim x = New With { Key .Name ="foo" }
0 голосов
/ 18 декабря 2008

Это единственное, что имеет сущностный фреймворк лучше, чем Linq2Sql (действительно единственное!). Вы можете выбрать различные поля из разных таблиц, и все же он может быть обновляемым. С Linq2Sql, если вы выбираете из нескольких таблиц (хотя здесь это не так, но когда вы создаете новый анонимный тип, это та же идея), он становится доступным только для чтения.

0 голосов
/ 18 декабря 2008

Readonly на обоих установлено на false

Option Explicit и Option strict также отключены

0 голосов
/ 18 декабря 2008

Когда вы создавали файл dbml для контекста данных, он создавал свойство LastName как поле только для чтения? Откройте dbml, найдите поле и проверьте свойство, чтобы увидеть, установлено ли оно только для чтения ...

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