。在调用动作时,我在数据库中插入一些数据,以后可以使用其他操作,一切都很好。
存储库正在获取数据并且一切都很好但是一旦会话终止,数据就不会插入到数据库中,即使会话存在于存储库中也是非常容易地重新获取数据。
如何强制orchard中的存储库插入数据?
答案 0 :(得分:1)
DB和NHibernate ISession
之间的显式同步操作可以通过显式调用强制执行:session.Flush()
。文档:
小引用:
...
ISession会不时执行所需的SQL语句 将ADO.NET连接的状态与状态同步 记忆中的物体。默认情况下,此过程为flush 以下几点
...
除非您明确
Flush()
,否则绝对无法保证Session何时执行ADO.NET调用,只保证执行它们的顺序。但是,NHibernate确保查询方法永远不会返回陈旧数据;他们也不会返回错误的数据。
在orchard中,存储库实现包装了该调用:
Repository.cs,第117行
public virtual void Flush() {
Session.Flush();
}
因此,我们可以做同样的事情
var repo = ... // get repository
repo.Flush();
将同步应用程序和数据库,即将执行所有INSERT语句。