Nhibernate映射和版本化实体

时间:2015-01-23 13:50:13

标签: hibernate nhibernate

我正在使用NHibernate作为其ORM的项目。

正在使用的持久性模型为每个连续的保存为实体创建一个新行(带有一个新的entity.Id)。实体的所有修订都由OriginatingId列链接,其中给定OriginatingId的max(entity.Id)实体是当前版本。

我的情况是我有两个实体A和B.

B需要包含对A的引用。这可以通过使用B.A_Id = A.Id上的连接进行映射来完成。

问题是当A被保存时,A的最新版本有一个新的Id,所以如果B保持不变,它会引用实体A的陈旧版本。

使用NHibernate的映射属性如何确保在保存实体A时更新实体B的A_Id属性?

1 个答案:

答案 0 :(得分:0)

使用此版本控制时,每个实体和版本化部件始终都有一个主条目。您必须比您想象的更早地处理历史数据,因此您需要访问它。引用现在没有问题,因为主ID不会更改。更改部分的ID也可以是更改日期。

class B
{
    public virtual int Id { get; protected set; }
    public virtual string NaturalKey { get; protected set; } // never changes
    public virtual Ilist<BData> Data { get; protected set; }

    private BData _changedData;
    public virtual BData ActualData { get { return _changedData == null ? _changedData = Data.Last().Clone() : _changedData; } }
}

class BData
{
    public BData Clone() { ... }
}

mapping.List(x => x.Data, p => p.OrderBy("changedDate"))