我已经使用Spring.NET和NHibernate有一段时间了,并且我非常满意。然而,我一直在尝试着使用多线程、响应式扩展和最终的任务并行库,这是一个很好的框架。不幸的是,由于NHiberntate的会话(session)不是线程安全的,所有种类的多线程方法都会失败。
我想问您如何从并行编程中受益,同时仍然利用NHibernate。
例如: 我有一个名为CustomerRegistrationService
的类,它的方法Register
执行几个任务:
ICustumer customer = this.CreateCustomerAndAdresses(params);
this.CreateMembership(customer);
this.CreateGeoLookups(customer.Address);
this.SendWelcomeMail(customer);
最后两种方法是理想的并行运行候选项,
CreateGeoLookups
调用一些 Web 服务来确定客户地址的地理位置,并创建一些新实体以及更新客户本身。SendWelcomMail
做它应该做的事情。由于
CreateGeoLookups
使用了 NHibernate(虽然通过存储库对象,因此 NHibernate 实际上是通过接口/依赖注入隐藏的),它将无法使用 Task.Factory.StarNew(...) 或其他线程机制。我的问题不是解决我所描述的问题,而是我想听听您对 NHibenrate、Spring.NET 和并行方法的看法。
非常感谢 Max