>我很难解释,所以我将从一个例子开始。
我开始在我的项目中实现对象更改历史记录。我想跟踪更改日期、更改器、更改对象等,并将该信息保留在我的数据库中。
我设计了一个类似的表格(最符合我的需求):
表更改
change_id (包) |change_date |changer_id (斐济) |object_id |table_name |column_name
具有示例行
120 |2013-11-20 |55 |88 |"发票" |"数字"
121 |2013-11-25 |53 |99 |"员工" |"名称"
现在,我想拥有这种实体对象:
class Employee
{
public virtual string Name {get; set;}
public virtual IList<Changes> ChangesList {get; set;}
}
class Invoice
{
public virtual string Number {get; set;}
public virtual IList<Changes> ChangesList {get; set;}
}
当然,发票和员工的更改列表应该来自数据库中的同一个表。是否可能以及如何通过映射实现这一目标?是否有任何替代方案/小改动使这成为可能?
在你发明自己的之前,先看看处理审计的NHibernate.Envers。
如果它不符合您的需求,可以像
public ChangeMap
{
Id(x => x.Id);
Map(x => x.Date, "change_date");
References(x => x.Changer, "changer_id");
...
Map(x => x.TableName, "table_name");
}
// in EmployeeMap
HasMany(x => x.ChangesList).Where("table_name = 'employees'");
// in InvoiceMap
HasMany(x => x.ChangesList).Where("table_name = 'invoices'");