nHibernate中Save()和SaveOrUpdate()之间的区别是什么?

时间:2015-09-08 10:05:51

标签: c# nhibernate

我想知道nHibernate中Save()和SaveOrUpdate()方法的区别是什么,我知道的主要区别在于:

保存()

  • 返回已保存实体的ID
  • 只需保存实体(不更新?

saveOrUpdate()方法

  • 不会返回已保存实体的ID

  • 调用Save()(如果db中不存在实体),或调用Update()(如果实体存在)

但我的问题是,nHibernate中的Save()类似于Java Hibernate中的Save()吗?因为如果我想编写简单的函数,它将保存实体并仅返回已保存实体的id。我应该写这样的函数:

public int ReturnMeAnIdOfSavedEntity(IEntity ent)
{
    _session.SaveOrUpdate(ent);
    return ent.Id;
}

或者我可以写出这样的功能:

public int ReturnMeAnIdOfSavedEntity(IEntity ent)
{
    return (int)_session.Save(ent);
}

我也发现了关于Save()的问题和博客,但是在Hibernate中,而不是在NHibernate中,所以如果函数类似,我不是100%正确的。

相关问题/博客

感谢您的回答!

1 个答案:

答案 0 :(得分:4)

自从我使用NHibernate以来已经有一段时间了,但是从我记忆中来看

  • 保存 - 相当于插入
  • 更新 - 相当于更新

如果你有一个对象集合,你会使用SaveOrUpdate,其中一些是新的,其他的是从数据库中读取的,可能或没有被更改为枚举集合一次,并确保更改将发送到DB:

foreach(var customer in customers) { session.SaveOrUpdate(customer); }

为了节省你做这样的事情:

foreach(var customer in customers)
{
    if(customer.Id == 0) { session.Save(customer); }
    else { session.Update(customer); }
}