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

时间:2013-11-15 15:56:51

标签: nhibernate nhibernate-mapping fluent-nhibernate-mapping

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

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

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

表格变化
change_id(pk)| change_date | changer_id(fk)| object_id | table_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;}
}

Invoice和Employee中的ChangesList当然应该来自DB中的同一个表。是否有可能以及如何通过映射实现这一目标?是否有任何替代方案/细微变化可以实现这一目标?

1 个答案:

答案 0 :(得分:2)

在您自己创建之前,请先查看处理审核的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'");
相关问题