Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# nHibernate中的Save()和SaveOrUpdate()有什么区别_C#_Nhibernate - Fatal编程技术网

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

C# nHibernate中的Save()和SaveOrUpdate()有什么区别,c#,nhibernate,C#,Nhibernate,我想知道nHibernate中Save()和SaveOrUpdate()方法之间的区别是什么,而我所知道的是主要区别在于: 保存() 已保存实体的返回id 只需保存一个实体(不更新?) SaveOrUpdate() 不返回已保存实体的id 调用Save()(如果实体在数据库中不存在),或调用Update()(如果实体存在) 但我的问题是,nHibernate中的Save()与java Hibernate中的Save()相似吗?因为如果我想写一个简单的函数,它将保存实体并只返回已经保存的实

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

保存()
  • 已保存实体的返回id
  • 只需保存一个实体(不更新?
SaveOrUpdate()
  • 不返回已保存实体的id

  • 调用Save()(如果实体在数据库中不存在),或调用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);
}
或者我可以编写这样的函数:

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%正确

相关问题/博客


谢谢你的回答

我已经有一段时间没有用过NHibernate了,但从我的记忆来看

  • 保存-执行与插入等效的操作
  • 更新-是否执行与更新等效的操作
如果有对象集合,您可以使用
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); }
}

我已经有一段时间没用NHibernate了,但从我记忆中

  • 保存-执行与插入等效的操作
  • 更新-是否执行与更新等效的操作
如果有对象集合,您可以使用
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); }
}

谢谢你的回答!我只想知道Save在对数据库中已经存在的实体进行调用时是否也调用Update()。所以我想它应该抛出一个错误而不是调用Update()(取决于您的答案)。谢谢您的回答!我只想知道Save在对数据库中已经存在的实体进行调用时是否也调用Update()。因此,我认为它宁愿抛出一个错误,而不是调用Update()(取决于您的答案)。