如何使用nhibernate更新记录

时间:2012-05-09 12:54:09

标签: asp.net-mvc-3 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;
        }

2 个答案:

答案 0 :(得分:2)

如果您的实体是持久性的,则无需明确更新。

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

答案 1 :(得分: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();    
}

也许最好将此代码放在try catch块中并捕获可能的异常,但我试图尽可能简化它。

希望这有帮助。