2012-05-09 15 views
0

こんにちは、私はMVC3で作業しており、データベース通信用にNHBERNATEを使用しています。
レコードを更新する際に問題が発生しています。nhibernateを使用してレコードを更新する方法

まずsession.SaveorUpdateが が、私は次のことを試してみましたが、これはまた:(

あなたがmvc3を使用している場合、あなたはコードを配置する必要があり、あなたのマッピングがOKであると仮定すると
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();  
} 

は多分にtry catchブロック内のコードを入れて、可能な例外をキャッチした方が良いですが、私は可能な限り、それを簡単にしようとしていた。

これが役に立ちます。

+3

セッションに既に存在するOUUpdateエンティティを保存する必要はありません。クエリによって返されたエンティティはすでにセッション内にあり、SaveOrUpdateは何もしません。 –

2

エンティティが永続的である場合、明示的に更新する必要はありません。

using (var session = sessionFactory.OpenSesion()) 
using (var tx = session.BeginTransaction()) 
{ 
    // perform your insert here 
    tx.Commit(); 
} 
関連する問題