【发布时间】:2012-05-10 08:14:36
【问题描述】:
我们的第一个 NHibernate 项目进展顺利。但是,我还没有完全理解如何在我们的场景中管理会话和对象。
因此,我们在持久对象模型中配置系统结构,并使用 NHibernate 存储在数据库中。
系统由物理设备组成,应用程序在服务进程中对其进行监控。所以在服务启动时,我们在服务中实例化设备对象,并根据从设备接口读取的数据更新它们的状态。对象模型在服务的生命周期内保持活动状态。
该服务还为 Silverlight 客户端提供服务,这些客户端显示对象数据并且还可以操作一些对象。但是它们必须访问服务用于监视的相同对象,例如,因为这些对象也有内存中的数据,这些数据不会被持久化。 (是的,我们使用 DTO 对象将数据实际传输到客户端。)
由于该服务是一个多线程系统,问题是应该如何管理 NHibernate 会话。
我现在正在考虑一种方法,即我们只需要一个后台线程来处理后台中的对象持久性,而其他线程只需将“SaveRequests”放置到我们的存储库中,而不是直接访问 NHibernate 会话。通过这种方式,我可以为服务使用单个会话,并与访问对象的服务和客户端完全分开来管理 NHibernate 层。
我还没有找到任何关于这种设置的文档,因为每个人都在建议一个会话每个请求的模型或一些变体。但如果我做对了,如果我在一个会话中实例化一个对象并将其保存在另一个会话中,它就不是同一个对象——而且 NHibernate 似乎也会在数据库中创建一个新条目。
我也试图弄清楚 IOC 容器在这种情况下的作用,但我没有找到任何有用的例子来证明它们真的可以帮助我。
我是在正确的轨道上还是应该如何继续?
【问题讨论】:
标签: c# silverlight nhibernate entity