NHibernate审计和继承类的问题

时间:2010-08-18 17:35:52

标签: nhibernate inheritance auditing

我有一个实现Animal的{​​{1}}类。还有另一个类IDomainObject,它继承自Cat。我正在为我的NHibernate映射使用Table Per Subclass继承策略,并将AnimalCreatedDate属性映射到LastModified表中的列和Animal表中的列

我还使用PreUpdate事件处理程序为LastModified分配值。

当我更新Cat对象中的属性时,会向数据库发送两个UPDATES:一个用于Cat,另一个用于Animal。但是,Cat的UPDATE是获取新LastModified值的UPDATE,Animal的UPDATE保留旧值。

当在另一个会话中再次检索Cat实体时,这会导致一些问题。似乎LastModified被新值(来自Animal)覆盖,有效地标记了实体已经变脏,并触发了另一个UPDATE。

我的整体设计似乎有问题,但我不确定它是什么。有什么更好的方法来解决这个问题?

Cat

public class Animal : IDomainObject {
    // ... various properties

    public virtual DateTime CreatedDate { get; set; }
    public virtual DateTime LastModified { get; set; }
    public virtual int Version { get; protected set; }
}

public class Cat : Animal {
    // ... various properties

    public override DateTime CreatedDate { get; set; }
    public override DateTime LastModified { get; set; }
    public override int Version { get; protected set; }
}

public interface IDomainObject {
    DateTime CreatedDate { get; set; }

    DateTime LastModified { get; set; }

    int Version { get; }
}

1 个答案:

答案 0 :(得分:2)

我不明白的两件事:

  1. 为什么在没有新功能的情况下覆盖Cat-class中的CreatedDate,LastModified和Version?

  2. 为什么两个表中都有这三列?

  3. 在基类中包含三个列/属性应该足够了 - 其他任何东西都要求麻烦。