我有一个实现Animal
的{{1}}类。还有另一个类IDomainObject
,它继承自Cat
。我正在为我的NHibernate映射使用Table Per Subclass继承策略,并将Animal
和CreatedDate
属性映射到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; }
}
答案 0 :(得分:2)
我不明白的两件事:
为什么在没有新功能的情况下覆盖Cat-class中的CreatedDate,LastModified和Version?
为什么两个表中都有这三列?
在基类中包含三个列/属性应该足够了 - 其他任何东西都要求麻烦。