在我的应用程序中,我遇到的情况是我们需要捕获创建和修改记录的时间以及用户执行这些操作的内容。所以我可能有一个类似的对象:
public class Product
{
int Id;
int Name;
DateTime CreatedOn;
int CreatedByUserId;
DateTime LastModifiedOn;
int LastModifiedByUserId;
}
在NHibernate中处理这些问题的最佳做法是什么?通过使用类似于here描述的拦截器?
答案 0 :(得分:1)
我认为没有“最佳”练习,但事件监听器的使用更常见。 http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx
就是一个很好的例子您需要考虑的一件事是您需要将userId存储在某个地方。我目前正在通过在启动时在侦听器上分配静态属性来做到这一点。它并不漂亮,但它完成了工作。
答案 1 :(得分:0)
我同意迭戈的观点,我认为这不是最好的做法。这取决于您的应用程序上下文。在Diego的链接中,并且在持久性(nHibernate)级别使用事件侦听器,它需要知道如何查找当前用户。根据您的应用,这可能没有意义。例如,如果您正在编写ASP.NET MVC应用程序,您是否真的希望您的持久层依赖于HttpContext来了解用户?是的,你可以传递一些类型的策略,但这似乎并不总是正确的事情。
我认为让服务层构建对象并添加创建者本身是完全有效的。然后传递整个物体,创造者已经水合,直到nHibernate持续。创建者将以与任何其他属性相同的方式保存到数据库中。