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

本文关键字:什么 区别 SaveOrUpdate Save nHibernate | 更新日期: 2023-09-27 18:11:45

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

Save ()

  • 返回已保存实体的id
  • 简单地保存一个实体(不更新?)

SaveOrUpdate ()

  • 不返回已保存实体的id

  • 调用Save()(如果实体在数据库中不存在)或Update()(如果实体存在)

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

相关的问题/博客
  • stackoverflow相关问题(Hibernate)
  • 博客相关问题(Hibernate)

谢谢你的回答!

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

我使用NHibernate已经有一段时间了,但是从我的记忆

  • Save -相当于Insert
  • Update -执行相当于Update
  • 的操作

如果您有一个对象集合,其中一些是新对象,另一些是从DB中读取的,可能已经或没有被更改,您将使用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); }
}