UnitOfWork在行动

时间:2010-06-18 17:05:55

标签: winforms nhibernate session

我想向您介绍我的Windows窗体应用程序场景:

我想创建发票,因此我打开包含发票详细信息的新窗口。然后我想添加新客户(到数据库),我想在我的发票中使用。输入所有信息(包括新客户信息)后,我单击“保存”以保存我的新文档。

问题是: 我应该在一次NH会议中完成所有工作吗?因此,在一个工作单元中保存新客户并保存发票。

或者也许应该单独保存新客户?如果是,那么如果我添加新客户并在发票明细窗体中单击取消,则取消发票创建,但客户仍在数据库中。

我在整个对话中使用一个工作单元。也许我错了。

3 个答案:

答案 0 :(得分:0)

逻辑上,在工作单元中创建客户然后在另一个中创建发票是有意义的。但是,看起来您似乎希望将客户发票创建在一起是原子的,因此在一次提交中创建它们是有意义的。

我不知道NHibernate如何处理这些关联 - 如果客户需要持久化以便将其与发票相关联,那么你别无选择,只能在创建客户后提交uow然后创建发票。

答案 1 :(得分:0)

  

我应该在一个NH中完成所有工作   会议?所以节省新客户和   在一个工作单元中保存发票。

是的,使用一个NHibernate会话。将会话的生命周期映射到单个工作单元通常是最简单的方法。

不要将会话与交易混淆。如果你想要在一次创建失败时回滚这两个创建,那就需要一个事务并且(大部分)与NHibernate会话无关。

答案 2 :(得分:0)

每个商业交易的对话都是你的朋友:

代码是unhaddins,我们有两个桌面应用程序示例。其中一个是我的“Chinook媒体经理”(在Google上查找帖子)。 在unhaddins的trunk中还有一个使用PostSharp的实现。