如何使用 NHibernate 在一次请求期间保存并更新同一类实例?
我对 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是预期的行为。
Flush
上Flush
可以显式或隐式调用(请参阅9.6. Flush)identity
生成器(不推荐)时,插入会立即发送,因为这是唯一的方法返回 ID。This is the expected behavior.
Flush
Flush
may be called explicitly or implicitly (see 9.6. Flush)identity
generator (not recommended), inserts are sent immediately, because that's the only way to return the ID.您应该使用交易。
一些很好的来源:这里 和 这里。
另外,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.