Inheritance Fluent NHibernate中的映射修订表

Inheritance Fluent NHibernate中的映射修订表,inheritance,fluent-nhibernate,triggers,nhibernate-mapping,revisions,Inheritance,Fluent Nhibernate,Triggers,Nhibernate Mapping,Revisions,我想通过在更新Post行之前保留对PostRevisions表的全部记录更改来审核Post表。修订后实体应存储所有修订后实体列以及修订ID列 我想用Fluent NHibernate绘制这张地图。修订后实体应该镜像修订后实体的属性,但不必维护两个实体类和映射类 我应该如何设计实体和映射来实现这一点 用于后期编辑的所需伪代码 可能的流畅映射: 我认为你要寻找的是一对多的关系:一篇文章有很多修改。 PostRevision引用单个帖子。 因此,我认为立柱侧的正确映射应该是 HasMany(x=>

我想通过在更新Post行之前保留对PostRevisions表的全部记录更改来审核Post表。修订后实体应存储所有修订后实体列以及修订ID列

我想用Fluent NHibernate绘制这张地图。修订后实体应该镜像修订后实体的属性,但不必维护两个实体类和映射类

我应该如何设计实体和映射来实现这一点

用于后期编辑的所需伪代码 可能的流畅映射:
我认为你要寻找的是一对多的关系:一篇文章有很多修改。 PostRevision引用单个帖子。 因此,我认为立柱侧的正确映射应该是

HasMany(x=> x.PostRevisions);  
在修订后方面:

References(x=> x.Post).  
有关如何映射这些关联的更完整信息,请参阅

编辑 如果您想为帖子的每个版本保留历史记录,您有2个选项: 1.将布尔“IsHistoric”字段添加到Post类。无论何时修改帖子,您都不会更改帖子对象本身,而是将其标记为“IsHistoric=true”,并创建一个表示修改帖子的新帖子对象。这是我在项目中使用的方法。 2.创建从Post继承的“HistoricPost”类。您不必重复您的映射,并且您可以为每个子类策略的这个类表使用一个单独的表。 有关更多详细信息,请参阅。
我认为还可以使用Idx=>x.SomeOtherId为子类指定不同的Id列;在“HistoricPost”的映射中。但是我还没有尝试过,所以我不是100%确定。

@sjonny,如果我不想复制所有映射属性,PostRevisions的类映射应该是什么样子?映射将有两行-一行映射id,类似Idx=>x.id,另一行映射我发布的id。就这样。因为Post实体已经单独映射,所以您不需要再次映射它。@Sjonny,我会更清楚地回答我的问题。PostRevision中的Post应该是值对象,而不是实体引用。更新Post记录之前,其当前值将保留在PostRevisions表中。抱歉,我没有意识到这一点。在这种情况下,我看到了两个选项——要么创建一个从Post继承的新实体PostHistory,然后在PostRevision类中引用它——参见此问题。另一个选项是向Post类添加一个布尔字段-IsHistoric或类似的。在每个修订版上,您都会创建一个新的Post实例,并更新现有实例的IsHistoric字段。@Sjonny,对于选项1,PostHistory如何在不重复代码的情况下继承Post的映射?
public class PostRevisionMap : ClassMap<PostRevision>
{
    public PostRevisionMap()
    {
        Id(x => x.Id);
        Component(x => x.Post); // will something like this work?
    }
}
HasMany(x=> x.PostRevisions);  
References(x=> x.Post).