您好我正在使用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 :(得分: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块中并捕获可能的异常,但我试图尽可能简化它。
希望这有帮助。