我正在使用ASP.NET MVC 2、NHibernate和DDD创建一个解决方案。我正在使用半CQRS类型的模型。
ASP.NET控制器向服务层发送经过验证的消息,该层更新域对象的状态。我的域分派“事件”,然后由“事件处理程序”捕获并对其进行操作。每个事件处理程序都可以访问存储库层,并可以提交域对象状态。
事件处理程序还使用(非NHibernate)存储库直接插入记录到基于报告的表中。事件处理程序还可以执行非数据库相关的操作,例如发送电子邮件。
事件处理程序还可以更改对象的状态,从而创建新的一组事件。
我该如何确保在单个asp.net请求中发生的所有数据库操作都在一个事务内。 我已经阅读了一些博客(例如Kevin Williams,Matt Wrock和Davy Brion),并获得了有关如何在Begin和End Request中启动Session对象的信息(再次使用Structure Map),但不确定事务是如何维护的。这加剧了开始和结束请求可能在不同线程上调用的事实。
我的Repository类以NHibernate ISession作为参数。如果我将ISession创建为混合范围(StructureMap),那么在请求期间通过StructrueMap传递的ISession参数是否保持不变。
请给予建议,也让我知道我的问题是否不清楚。
ASP.NET控制器向服务层发送经过验证的消息,该层更新域对象的状态。我的域分派“事件”,然后由“事件处理程序”捕获并对其进行操作。每个事件处理程序都可以访问存储库层,并可以提交域对象状态。
事件处理程序还使用(非NHibernate)存储库直接插入记录到基于报告的表中。事件处理程序还可以执行非数据库相关的操作,例如发送电子邮件。
事件处理程序还可以更改对象的状态,从而创建新的一组事件。
我该如何确保在单个asp.net请求中发生的所有数据库操作都在一个事务内。 我已经阅读了一些博客(例如Kevin Williams,Matt Wrock和Davy Brion),并获得了有关如何在Begin和End Request中启动Session对象的信息(再次使用Structure Map),但不确定事务是如何维护的。这加剧了开始和结束请求可能在不同线程上调用的事实。
我的Repository类以NHibernate ISession作为参数。如果我将ISession创建为混合范围(StructureMap),那么在请求期间通过StructrueMap传递的ISession参数是否保持不变。
请给予建议,也让我知道我的问题是否不清楚。
谢谢您,
Mar
The Mar