这必定是其他人遇到的情况,所以我想我会问这个问题。让人们在nHibernate中表示时间关系的问题实现了良好的通用解决方案。这个问题存在于我无法控制的数据库中,所以请不要告诉我数据库模型不正确。我无法改变它。
我们有一个简单的Parent:Child关系,其中孩子的有效时间必须在父有效时间内。简单地说就是Parent.ValidFrom< = Child.ValidFrom&& Parent.ValidTo> = Child.ValidTo。此规则在数据库中强制执行,这意味着我无法发出会导致记录违反该规则的UPDATE语句。这是不容谈判的。
重要的是,这意味着会影响我对DB进行更改的顺序。
因此,我们可以看到更新发生的顺序非常重要。我们不能仅仅依赖于nHibernate的默认更新。此外,在某些情况下,我们需要在单个实体上执行两个UPDATE,其中nHibernate通常会执行一个。
所以,我希望能够表达一个通用的时间Parent:我的域模型中的Child(可能使用[attribute]装饰类),并且有一些代码为我做了很多工作。
有没有人遇到过这个问题,有人可以提出任何意见吗?
请再次记住,我无法控制我的数据库架构,我想写一些可应用于我整个模型的通用内容。唯一需要注意的是,我只关心提交我在内存中修改过的对象。所以我不期望写一些代码来决定正确的ValidFrom / ValidTo日期是什么。
答案 0 :(得分:1)
由于您无法控制NH发布更新语句的顺序,因此最佳操作方法可能是使用IStatelessSession
“手动”进行更新。
你基本上放弃了变化追踪;你需要告诉NH哪个对象要更新。