我想知道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%正确。

相关问题/博客


stackoverflow related question (Hibernate)
blog related question (Hibernate)


感谢您的回答!

最佳答案

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


保存-相当于插入
更新-等同于更新


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

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


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

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

关于c# - nHibernate中的Save()和SaveOrUpdate()有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32454892/

10-13 08:04