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

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

希望这可以帮助。

于 2012-05-09T13:01:49.390 回答