0

こんにちは、私は 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;
        }
4

2 に答える 2

2

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

using (var session = sessionFactory.OpenSesion())
using (var tx = session.BeginTransaction())
{
    // perform your insert here
    tx.Commit();
}
于 2012-05-09T15:09:55.180 に答える
0

マッピングに問題がないと仮定して、mvc3を使用している場合は、たとえばコントローラー内にコードを配置する必要があります。

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();    
}

このコードをtrycatchブロック内に配置し、考えられる例外をキャッチする方が良いかもしれませんが、私はそれをできるだけ単純にしようとしていました。

お役に立てれば。

于 2012-05-09T13:01:49.390 に答える