1

我的域对象有一个“CreateDate”和“ModidfyDate”成员(DateTime)。

当用户更新域对象(Asp.Net MVC)时,我的视图模型不包含这些值。(将在我的存储库“创建”和“更新”方法中设置)

因此,当我更新一个对象时,我没有可用的“CreateDate”,因此更新方法将失败。我似乎有 2 个选项,但我也不喜欢: 1) 在“CreateDate”属性(表单中的隐藏字段)上有我的 viewmodel 标签,所以我有原始的 CreateDate 可用。2)或者,在我的“更新”存储库方法中,首先从数据库中获取原始记录并设置我要更新的对象的 CreateDate 成员(对数据库的不必要调用)

处理这个的“正常”方式是什么?

4

1 回答 1

1

一个很好的处理方式CreateDateModifyDate使用 NHibernate 的事件监听器。

以下是一些关于如何使用IPreInsertEventListenerand创建简单审计的示例IPreUpdateEventListener

http://ayende.com/blog/3987/nhibernate-ipreupdateeventlistener-ipreinserteventlistener
http://nhforge.org/wikis/howtonh/creating-an-audit-log-using-nhibernate-events.aspx


附带说明一下,您的方法不应该有CreateDate问题Update。你的Update方法看起来如何?

通常的工作流程是在 POST ActionMethod 中获取您的视图模型,使用 NHibernate 的 ISession 或您的自定义存储库从数据库中加载实体对象,然后手动或使用类似的工具将视图模型中的属性映射到实体自动映射器CreateDate在视图模型到实体的映射中应该忽略类似的属性。

于 2012-06-17T21:19:22.990 回答