nHibernate 中的 Save() 和 SaveOrUpdate() 有什么区别

What is the difference between Save() and SaveOrUpdate() in nHibernate

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

保存()

保存或更新()

但我的问题是,nHibernate 中的 Save() 是否类似于 java Hibernate 中的 Save()?因为如果我想写一个简单的函数,它会保存实体,return 我只会保存一个已经保存的实体的 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% 正确。

相关question/blogs

感谢解答!

我已经有一段时间没有使用 NHibernate 了,但据我所知

  • 保存 - 相当于插入
  • Update - 相当于 Update

如果你有一个对象集合,你会使用SaveOrUpdate,其中一些是新的,另一些是从数据库中读取的,并且可能已更改或未更改以枚举一次集合并确保更改已发送到数据库:

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

为了避免您这样做:

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