是否可以按包含表名称的列映射表?



>我很难解释,所以我将从一个例子开始。

我开始在我的项目中实现对象更改历史记录。我想跟踪更改日期、更改器、更改对象等,并将该信息保留在我的数据库中。

设计了一个类似的表格(最符合我的需求):

表更改
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'");

相关内容

  • 没有找到相关文章

最新更新