2012-05-09 3 views
0

안녕하세요 저는 MVC3에서 데이터베이스 통신을 위해 NHIBERNATE를 사용하고 있습니다
레코드 업데이트에 문제가 있습니다. 당신이 mvc3를 사용하는 경우nhibernate를 사용하여 레코드를 업데이트하는 방법

첫째 session.SaveorUpdate 그런 다음 작동하지 않습니다 나는 다음과 같은 일을 시도했지만이 또한 당신의 매핑이 확인이라고 가정 :(

public bool EditParentStudent(ParentStudent parentstudent) 
     { 
      log.Debug("Start"); 
      if (parentstudent == null) 
      { 
       throw new ArgumentNullException("parentstudent"); 
      } 
      ISession session = DataAccessLayerHelper.OpenWriterSession(); 
      ITransaction transaction = session.BeginTransaction(); 
      bool saved = false; 
      try 
      { 
       session.SaveOrUpdate(parentstudent); 
       transaction.Commit(); 
       saved = true; 
      } 
      catch (SessionException ex) 
      { 
       if (transaction != null && transaction.IsActive) 
       transaction.Rollback(); 
       log.Error(ex); 
      } 
      finally 
      { 
       if (transaction != null) 
        transaction.Dispose(); 

       if (session != null && session.IsConnected) 
        session.Close(); 
      } 
      log.Debug("End"); 

      return saved; 
     } 
+0

자세한 정보를 제공해야합니다. "작동하지 않는다"는 것은 무엇입니까? 예외? 오류 메시지 란 무엇입니까? DB에 변경 사항이 있습니까? 어떻게 테스트합니까? 이 방법을 어떻게 부릅니까? 예상되는 결과는 무엇입니까? ...? ...? –

답변

0

작동하지 않습니다, 당신은 코드를 삽입한다 컨트롤러 내부에, 예를 들어

public ActionResult Edit(ParentStudent parentstudent) 
{ 
    //open session 
    // open transaction 
    //found existing data 
    var data = session.Query<ParentStudent>().Where(x=>x.Id == parentstudent.Id).FirstOrDefault(); 
    session.SaveOrUpdate(data); 
    transaction.Commit(); 
    //close transaction 
    //close session 

return View();  
} 

어쩌면 시도의 catch 블록 내부에이 코드를 넣어 가능한 예외를 캐치하는 것이 좋습니다,하지만 난 가능한 한 간단하게 만들려고 노력했다.

희망이 도움이됩니다.

+3

세션에 이미있는 OO 업데이트를 저장할 필요가 없습니다. 쿼리에 의해 반환되는 엔티티는 이미 세션에 있으며 SaveOrUpdate는 아무 것도 수행하지 않습니다. –

2

엔티티가 지속성이면 명시 적으로 업데이트 할 필요가 없습니다.

using (var session = sessionFactory.OpenSesion()) 
using (var tx = session.BeginTransaction()) 
{ 
    // perform your insert here 
    tx.Commit(); 
} 
관련 문제