如何使用 NHibernate 在一次请求期间保存并更新同一类实例?

发布于 2024-11-18 18:15:22 字数 556 浏览 2 评论 0原文

我对 NHibernate 比较陌生,我有一个关于它的问题。 我在 MVC 项目中的 Controller 方法中使用此代码片段:

MyClass entity = new MyClass 
                    {
                        Foo = "bar"
                    };

_myRepository.Save(entity);

....

entity.Foo = "bar2";
_myRepository.Save(entity);

第一次实体成功保存在数据库中。但第二次,没有一个请求不会发送到数据库。我的方法保存在存储库中只是做:

public void Save(T entity)
{
  _session.SaveOrUpdate(entity);
}

我应该做什么才能在一个请求期间保存并更新此实体?如果我在将实体保存到数据库后添加 _session.Flush(); 它可以工作,但我不确定这是否是正确的做法。

谢谢

I'm relatively new to NHibernate and I've got a question about it.
I use this code snippet in my MVC project in Controller's method:

MyClass entity = new MyClass 
                    {
                        Foo = "bar"
                    };

_myRepository.Save(entity);

....

entity.Foo = "bar2";
_myRepository.Save(entity);

The first time entity saved in database succesfully. But the second time not a single request doesnt go to database. My method save in repository just does:

public void Save(T entity)
{
  _session.SaveOrUpdate(entity);
}

What should I do to be able to save and then update this entity during one request? If I add _session.Flush(); after saving entity to database it works, but I'm not sure, if it's the right thing to do.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏了南城 2024-11-25 18:15:22

这是预期的行为。

  • 更改仅保存在 Flush
  • Flush 可以显式或隐式调用(请参阅9.6. Flush)
  • 当使用 identity 生成器(不推荐)时,插入会立即发送,因为这是唯一的方法返回 ID。

This is the expected behavior.

  • Changes are only saved on Flush
  • Flush may be called explicitly or implicitly (see 9.6. Flush)
  • When using an identity generator (not recommended), inserts are sent immediately, because that's the only way to return the ID.
七度光 2024-11-25 18:15:22

您应该使用交易。
一些很好的来源:这里 和 这里
另外,nHibernate 之夏是我第一次开始使用 nHibernate。这是学习基础知识的非常好的资源。

you should be using transactions.
a couple of good sources: here and here.
also, summer of nHibernate is how I first started with nHibernate. it's a very good resource for learning the basics.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文