我们有我们的第一个NHibernate项目进行得非常好。但是,我仍然没有掌握如何在我们的场景中管理会话和对象的完整画面。实体对象和NHibernate会话
所以,我们在一个持久对象模型中配置一个系统结构,存储在一个数据库中,使用NHibernate。
该系统由应用程序在服务进程中监视的物理设备组成。因此,在服务启动时,我们实例化服务中的Device对象,并根据从设备接口读取的数据更新其状态。对象模型在服务的生命周期中保持活动状态。
该服务还提供Silverlight客户端,该客户端显示对象数据并可能操纵某些对象。但是它们必须访问服务用于监视的相同对象,例如,因为对象也具有内存数据,这些数据也不会被保留。 (是的,我们使用DTO对象实际上将数据传输到客户端。)
由于该服务是一个多线程系统,所以问题是如何管理NHibernate会话。
我现在正在考虑一种方法,我们只需要一个后台线程来处理后台中的对象持久化,其他线程将“SaveRequests”放到我们的Repository中,而不是直接访问NHibernate会话。通过这种方式,我可以为服务使用单个会话并管理与访问对象的服务和客户端完全分离的NHibernate层。
我还没有找到这样的设置的任何文档,因为每个人都建议每会话请求模型或一些变化。但是,如果我正确地做到了,如果我在一个会话中实例化一个对象并将它保存在另一个会话中,它不是同一个对象 - 并且NHibernate似乎也会在数据库中创建一个新条目。
我也试图找出IOC容器在这种情况下的角色,但我还没有找到任何有用的例子来证明他们真的可以帮助我。
我在正确的轨道上,还是应该如何继续?
是的,我已经考虑过了。但是因为我的对象“永远”活着,我认为UnitOfWork也应该永远活着。或者,我如何将一个会话中的更改始终与服务会话中活动的对象关联起来?主界面不是客户端,而是跟踪系统状态的服务应用程序,同时我们在对象中也有实时数据(例如状态和当前值)。 –
我想不出任何情况下,你会想'活着的对象'的时间超过〜1秒... – Phill
我们决定监视是基于追踪系统当前状态的对象,因为是主要部分。它们的配置一直存在,但不是现在的状态。 –