我正在使用NHibernate在asp.net mvc中开发一个应用程序。我的模型中有一些实体继承自Entity抽象类,如下所示:
public abstract class Entity
{
private IList<History> _history = null;
public virtual long Id { get; set; }
public virtual IEnumerable<History> History { get { return _history; } }
public abstract TypeOfHistory GetTypeHistory(); // to return the right type
}
// is it right ?
public enum TypeOfHistory {
Product = 1, Employee = 2, Customer = 3
}
public class Product : Entity { /* code */ }
public class Employee : Entity { /* code */ }
public class Customer : Entity { /* code */ }
我有一个History类来记录每个实体修改:
public class History
{
public virtual string Description { get; set; }
public virtual DateTime Date { get; set; }
public virtual string User { get; set; }
public virtual Entity Entity { get; set; }
public virtual TypeOfHistory Type { get; set; } // is it right ?
protected History() { }
}
我想知道,如何在Entity类中映射此History类和History属性?我的意思是,我将为Product提供一个表,为Employee提供另一个表,为Customer等提供另一个表,并且只有一个名为History的表用于所有实体(产品,客户等),但我不会创建外键。我正在考虑创建一个字段来保存实体的类型,但我不知道如何工作并映射属性以正确的方式过滤。 (基于类型)。我知道如何使用nhibernate中的Listerens来做日志。
由于
答案 0 :(得分:2)
只是一个建议......您是否考虑过使用审计框架? Hibernate(java的)有Hibernate Envers,它通过非常简单的设置完成了很棒的工作。似乎.NET有一个端口:https://bitbucket.org/RogerKratz/nhibernate.envers