У меня проблема с обновлением 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 доступен только для чтения. Я нигде не выполнял это присвоение и не вижу, в чем проблема.





Вы назначаете row.LastName в первой строке цикла «For Each».
Вы копируете с включенной или выключенной опцией строгий / явный? Если в этой строке есть опция strict, компиляция не должна выполняться.
Причина, по которой вы это видите, заключается в том, что при создании анонимного типа для запросов, содержащих явное предложение Select, все свойства результирующего типа будут доступны только для чтения. Это имеет такой же эффект, как если бы все свойства были объявлены для анонимного типа с использованием поля Key. Например
Dim x = New With { Key .Name = "foo" }
В VB предложение select не требуется. Если он не указан, VB выберет результат последнего предложения LINQ. В этом случае lqp
Создавалось ли при создании файла dbml для контекста данных свойство LastName как поле, доступное только для чтения? Откройте dbml, найдите поле и проверьте свойство, чтобы узнать, установлено ли оно только для чтения ...
Только для чтения на обоих установлено значение false
Option Explicit и Option strict также отключены
Откуда вы берете свойство ReadOnly?
Это единственное, что у entity framework лучше, чем Linq2Sql (действительно единственное!). Вы можете выбирать различные поля из разных таблиц, но при этом их можно обновлять. С Linq2Sql, если вы выбираете из нескольких таблиц (хотя здесь вас нет, но когда вы создаете новый анонимный тип, это та же идея), он становится доступным только для чтения.
Когда вы выбираете только отдельные поля, вы на лету создаете анонимный тип, который больше не является частью механизма отслеживания / обновления изменений ORM.
Чтобы это работало, вам нужно будет изменить часть выбора на «Select lqp».
Итак, чтобы иметь доступ на запись к полям, вам нужно будет выбрать весь объект? Выберите lqp. Это полезно знать ...