0

MVC 3, VB.NET, RAZOR app, using EF. I am having an issue in my post function with the database not updating at all... Using a break at db.savechanges() I look at the variable and all of the correct information is contained in the UpdateModel( ) part. But no dice the code executes and returns no errors so all looks fine but when I look at the database table it has not been changed at all, all of the old values are still present.. Function is as follows:

   <AcceptVerbs(HttpVerbs.Post)>
    Function EditCourse(ByVal _eCourse As cours) As ActionResult
        Dim id As Integer = _eCourse.course_id

            Dim _filename As String = String.Empty
            Dim _guid As String = String.Empty

            Dim _count As Integer = 0
            Dim _courseFiles As cours = db.courses.Where(Function(f) f.course_ref = _eCourse.course_ref).First

            Dim _file1 As String = _courseFiles.handoutFile1
            Dim _file2 As String = _courseFiles.handoutFile2
            Dim _file3 As String = _courseFiles.handoutFile3
            Dim _file4 As String = _courseFiles.handoutFile4
            Dim _file5 As String = _courseFiles.handoutFile5
            Dim _file6 As String = _courseFiles.handoutFile6
            Dim _file7 As String = _courseFiles.handoutFile7
            Dim _file8 As String = _courseFiles.handoutFile8
            For Each File As String In Request.Files
                _count += 1
                Dim hpf As HttpPostedFileBase = TryCast(Request.Files(File), HttpPostedFileBase)
                If hpf.ContentLength = 0 Then
                    Continue For
                End If

                Dim savedfileName As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + hpf.FileName
                hpf.SaveAs(savedfileName)
                _filename = hpf.FileName

                Select Case _count
                    Case Is = 1
                        If Not String.IsNullOrWhiteSpace(_file1) Then
                            If Not String.Compare(_eCourse.handoutFile1, _file1) = 0 AndAlso Not String.IsNullOrWhiteSpace(_eCourse.handoutFile1) Then
                                Dim FileToDelete As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + _file1
                                If System.IO.File.Exists(FileToDelete) = True Then
                                    System.IO.File.Delete(FileToDelete)
                                End If
                            End If
                        End If
                        _eCourse.handoutFile1 = _filename

                    Case Is = 2
                        If Not String.IsNullOrWhiteSpace(_file2) Then
                            If Not String.Compare(_eCourse.handoutFile2, _file2) = 0 AndAlso Not String.IsNullOrWhiteSpace(_eCourse.handoutFile2) Then
                                Dim FileToDelete As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + _file2
                                If System.IO.File.Exists(FileToDelete) = True Then
                                    System.IO.File.Delete(FileToDelete)
                                End If
                            End If
                        End If
                        _eCourse.handoutFile2 = _filename

                    Case Is = 3
                        If Not String.IsNullOrWhiteSpace(_file3) Then
                            If Not String.Compare(_eCourse.handoutFile3, _file3) = 0 AndAlso Not String.IsNullOrWhiteSpace(_eCourse.handoutFile3) Then
                                Dim FileToDelete As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + _file3
                                If System.IO.File.Exists(FileToDelete) = True Then
                                    System.IO.File.Delete(FileToDelete)
                                End If
                            End If
                        End If
                        _eCourse.handoutFile3 = _filename

                    Case Is = 4
                        If Not String.IsNullOrWhiteSpace(_file4) Then
                            If Not String.Compare(_eCourse.handoutFile4, _file4) = 0 AndAlso Not String.IsNullOrWhiteSpace(_eCourse.handoutFile4) Then
                                Dim FileToDelete As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + _file4
                                If System.IO.File.Exists(FileToDelete) = True Then
                                    System.IO.File.Delete(FileToDelete)
                                End If
                            End If
                        End If
                        _eCourse.handoutFile4 = _filename

                    Case Is = 5
                        If Not String.IsNullOrWhiteSpace(_file5) Then
                            If Not String.Compare(_eCourse.handoutFile5, _file5) = 0 AndAlso Not String.IsNullOrWhiteSpace(_eCourse.handoutFile5) Then
                                Dim FileToDelete As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + _file5
                                If System.IO.File.Exists(FileToDelete) = True Then
                                    System.IO.File.Delete(FileToDelete)
                                End If
                            End If
                        End If
                        _eCourse.handoutFile5 = _filename

                    Case Is = 6
                        If Not String.IsNullOrWhiteSpace(_file6) Then
                            If Not String.Compare(_eCourse.handoutFile6, _file6) = 0 AndAlso Not String.IsNullOrWhiteSpace(_eCourse.handoutFile6) Then
                                Dim FileToDelete As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + _file6
                                If System.IO.File.Exists(FileToDelete) = True Then
                                    System.IO.File.Delete(FileToDelete)
                                End If
                            End If
                        End If
                        _eCourse.handoutFile6 = _filename

                    Case Is = 7
                        If Not String.IsNullOrWhiteSpace(_file7) Then
                            If Not String.Compare(_eCourse.handoutFile7, _file7) = 0 AndAlso Not String.IsNullOrWhiteSpace(_eCourse.handoutFile7) Then
                                Dim FileToDelete As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + _file7
                                If System.IO.File.Exists(FileToDelete) = True Then
                                    System.IO.File.Delete(FileToDelete)
                                End If
                            End If
                        End If
                        _eCourse.handoutFile7 = _filename

                    Case Is = 8
                        If Not String.IsNullOrWhiteSpace(_file8) Then
                            If Not String.Compare(_eCourse.handoutFile8, _file8) = 0 AndAlso Not String.IsNullOrWhiteSpace(_eCourse.handoutFile8) Then
                                Dim FileToDelete As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + _file8
                                If System.IO.File.Exists(FileToDelete) = True Then
                                    System.IO.File.Delete(FileToDelete)
                                End If
                            End If
                        End If
                        _eCourse.handoutFile8 = _filename

                End Select

            Next

            UpdateModel(_eCourse)
            db.SaveChanges()


            Return RedirectToAction("CourseIndex")

      End Function

Any Ideas on why this is going wrong?????

Skindeep2366
  • 1,549
  • 3
  • 41
  • 68

1 Answers1

1

You aren't attaching your _eCourse to your context so it won't update it. UpdateModel I don't believe is required here at all as that simply takes your posted form values an assigns to your model which you already have since eCourse is a parameter. Do something like (on phone here sorry) DB.Entry(_eCourse).State = EntityState.Modified

And then save changes

Adam Tuliper
  • 29,982
  • 4
  • 53
  • 71
  • VS isnt liking the .STATE part of that and is saying its not a member of xxxxxxxx.cours at all... I have that line right now reading db.courses(_eCourse.course_id).State = EntityState.Modified and no dice... It should be noted I tried db.entry(_ecourse) etc and it does not take the Entry param. further I had to specify the course_id because it was wanting an integer there.. – Skindeep2366 Mar 09 '12 at 05:52
  • Im assuming then you are using ObjectContext and not DbContext. What version of EF are you using? If its a new object you'll have to 'Add' it, an existing object you need to 'attach as modified'. I highly recommend installing the DbContext template as the api is much easier to work with for DbContext rather than ObjectContext but requires at least EF 4.0. Here is an example of update using ObjectContext (see the update method) http://stackoverflow.com/questions/3594515/how-to-update-an-entity-in-entity-framework-4-net/3594608#3594608 If you need some direction on using dbcontext let me know. – Adam Tuliper Mar 09 '12 at 14:52