我的域对象有一个“CreateDate”和“ModidfyDate”成员(DateTime)。
当用户更新域对象(Asp.Net MVC)时,我的视图模型不包含这些值。 (它将在我的存储库中设置“创建”和“更新”方法)
因此,当我更新对象时,我没有“CreateDate”可用,因此Update方法将失败。 我似乎有2个选项,我也不喜欢: 1)沿着“CreateDate”属性(表单中的隐藏字段)创建我的viewmodel标记,以便我可以使用原始的CreateDate。 2)或者,在我的“更新”存储库方法中,首先从数据库中获取原始记录并设置我要更新的对象CreateDate成员(对数据库的不必要调用)
使用它的“正常”方式是什么?
答案 0 :(得分:1)
处理CreateDate
和ModifyDate
的好方法是使用NHibernate的事件监听器。
以下是有关如何使用IPreInsertEventListener
和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从您的自定义存储库加载数据库中的实体对象,然后手动或使用您的属性从视图模型映射到实体像AutoMapper这样的工具。在视图模型到实体映射中应忽略CreateDate
之类的属性。