сущность linq вопрос сохранения - PullRequest
1 голос
/ 09 февраля 2012

Я пытался получить изменение значения поля для фиксации.Есть ли здесь что-то явно не так:

<HttpPost()>
Function Details(id As Guid?, model As RosterDetailModel) As ActionResult
If model.Action = RosterDetailModel.ActionOption.Save Then
    If model.Action = RosterDetailModel.ActionOption.Save Then
        Dim invalid = False ' initalize able to save
        'check validations
        Dim sFirstname = IIf(model.NameFirst Is Nothing, String.Empty, model.NameFirst).ToString().Trim()
        If sFirstname = String.Empty Then
            invalid = True
            ModelState.AddModelError("NameFirst", "First Name is required.")
        End If

        If invalid = False Then
            'save is ok to do
            Using db As New BCData()
                Dim userModel As New RosterDetailModel(db, id)
                'Dim userModel As New RosterDetailModel
                'userModel =
                userModel.NameFirst = sFirstname
                'db.ApplyCurrentValues(userModel)
                'db.AcceptAllChanges()
                db.SaveChanges()
                'userModel.SaveChanges(db, id, userModel)
            End Using
        End If
    End If
End If
Return View(model)
End Function

Я вижу Модель сущностей не обновляется в SaveChanges имеет "Проблема была в том, что я ссылался на разные экземпляры контейнера (каждый менеджер создал свой). Таким образом, объекты сущности не были прикреплены ни к чему »...Я не уверен, что именно мне нужно изменить.Когда я попытался выполнить запрос Linq и установить значения напрямую, он сказал бы, что поле доступно только для чтения.

If invalid = False Then
    'save is ok to do
    Using db As New BCData()
    'Dim userModel As New RosterDetailModel(db, id)
    Dim userModel = From studentusers In db.studentusers _
    Where _
      studentusers.studentGuid = id _
    Select _
      studentusers.cellPhone, _
      studentusers.officePhone, _
      studentusers.phone, _
      studentusers.alternateEmail, _
      studentusers.country, _
      studentusers.zip, _
      studentusers.state, _
      studentusers.city, _
      studentusers.address2, _
      studentusers.address1, _
      studentusers.ForumeMailNotificationPreferences, _
      studentusers.magazineSubscribed, _
      studentusers.avatar, _
      studentusers.dateStudentActivated, _
      studentusers.dateDownloadOn, _
      studentusers.dateInstructorOn, _
      studentusers.instructor, _
      studentusers.ctcAdmin, _
      studentusers.download, _
      studentusers.accessLevel, _
      studentusers.datecreated, _
      studentusers.guidsignaturecookie, _
      studentusers.password, _
      studentusers.organization, _
      studentusers.email, _
      studentusers.lastname, _
      studentusers.firstname, _
      studentusers.groupGuid, _
      studentusers.studentGuid


    db.Attach(userModel)
    'Dim userModel As New RosterDetailModel
    'userModel =
    userModel.FirstOrDefault.firstname = sFirstname '**<- **** READ ONLY ???**  
                'db.ApplyCurrentValues(userModel)
    'db.AcceptAllChanges()

    db.SaveChanges()
    'userModel.SaveChanges(db, id, userModel)
End Using

1 Ответ

1 голос
/ 12 февраля 2012

Перезагрузите userModel из базы данных:

If invalid = False Then
    Using db As New BlueCardData()
        Dim userModel = (From studentuser In db.studentusers _
                         Where studentuser.studentGuid = id _
                         Select studentuser).Single()
        'original userModel from DB is attached to context now
        'change tracking will start from here

        userModel.firstname = sFirstname

        db.SaveChanges()
        'EF detects change of firstname and will create UPDATE statement
    End Using

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

...