2012-03-09 2 views
0

MVC 3, VB.NET, RAZOR 앱, EF 사용. 내 포스트 기능에서 데이터베이스를 전혀 업데이트하지 않는 문제가 있습니다. db.savechanges()에서 중단 점을 사용하면 변수를보고 올바른 정보가 모두 UpdateModel() 부분에 포함되어 있습니다. 하지만 주사위는 코드를 실행하지 않고 오류를 반환하지 않으므로 모두 괜찮아 보이지만 데이터베이스 테이블을 보면 전혀 변경되지 않았으므로 모든 이전 값은 여전히 ​​존재합니다. 함수는 다음과 같습니다 :EF 모델 데이터베이스 사용하지 않음 updateModel로 업데이트

<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 

왜 이것이 잘못 될지에 대한 아이디어 ?????

답변

1

_eCourse를 컨텍스트에 연결하지 않아 업데이트하지 않습니다. UpdateModel eCourse가 매개 변수이기 때문에 이미 가지고있는 모델에 할당 된 양식 값을 단순히 가져 가기 때문에 여기서는 필요하지 않다고 생각합니다. (여기 전화 죄송합니다) 같은 DB.Entry (_eCourse) .STATE = EntityState.Modified

를 수행 그리고

+0

VS 그의 .STATE 부분을 좋아하는 밤은 변경 사항을 저장하고 자사의 회원을 말하는 xxxxxxxx.cours ... 나는 db.courses (_eCourse.course_id) .State = EntityState.Modified와 주사위를 읽지 않고 있습니다. db.entry (_ecourse) 등을 시도했는지 주목해야합니다. Entry 매개 변수를 사용하지 않습니다. 더 나아가 거기에 정수를 원했기 때문에 course_id를 지정해야했습니다. – Skindeep2366

+0

Im 그럼 당신은 DbContext가 아니라 ObjectContext를 사용하고 있다고 가정합니다. 어떤 EF 버전을 사용하고 있습니까? 그것의 새로운 객체가 있다면 그것을 '추가'해야합니다. 기존 객체는 '수정 한 상태로 부착'해야합니다. DbContext 템플릿을 설치하는 것이 좋습니다. 왜냐하면 API는 ObjectContext 대신 DbContext를 사용하는 것이 훨씬 쉽지만 적어도 EF 4.0이 필요합니다. 다음은 ObjectContext를 사용한 업데이트 예제입니다 (update 메소드 참조). http://stackoverflow.com/questions/3594515/how-to-update-an-entity-in-entity-framework-4-net/3594608#3594608 If dbcontext 사용에 대한 지침이 필요합니다. –

관련 문제