NHibernate&数据库强制执行的时间关系

时间:2010-12-13 17:13:40

标签: nhibernate

这必定是其他人遇到的情况,所以我想我会问这个问题。让人们在nHibernate中表示时间关系的问题实现了良好的通用解决方案。这个问题存在于我无法控制的数据库中,所以请不要告诉我数据库模型不正确。我无法改变它。

我们有一个简单的Parent:Child关系,其中孩子的有效时间必须在父有效时间内。简单地说就是Parent.ValidFrom< = Child.ValidFrom&& Parent.ValidTo> = Child.ValidTo。此规则在数据库中强制执行,这意味着我无法发出会导致记录违反该规则的UPDATE语句。这是不容谈判的。

重要的是,这意味着会影响我对DB进行更改的顺序。

  1. 扩展孩子= 2更新。
    一世。展开父。
    II。展开Child。
  2. 承包父= 2更新。
    一世。与孩子订立合同。
    II。与父母签约。
  3. 将父母和孩子移至未来日期= 3更新。
    一世。改变父有效。
    II。移动孩子。
    III。移动Parent.ValidFrom。
  4. 将父母和孩子移至过去= 3更新日期 一世。更改父ValidFrom。
    II。移动孩子。
    III。移动Parent.ValidTo。
  5. 因此,我们可以看到更新发生的顺序非常重要。我们不能仅仅依赖于nHibernate的默认更新。此外,在某些情况下,我们需要在单个实体上执行两个UPDATE,其中nHibernate通常会执行一个。

    所以,我希望能够表达一个通用的时间Parent:我的域模型中的Child(可能使用[attribute]装饰类),并且有一些代码为我做了很多工作。

    有没有人遇到过这个问题,有人可以提出任何意见吗?

    请再次记住,我无法控制我的数据库架构,我想写一些可应用于我整个模型的通用内容。唯一需要注意的是,我只关心提交我在内存中修改过的对象。所以我不期望写一些代码来决定正确的ValidFrom / ValidTo日期是什么。

1 个答案:

答案 0 :(得分:1)

由于您无法控制NH发布更新语句的顺序,因此最佳操作方法可能是使用IStatelessSession“手动”进行更新。

你基本上放弃了变化追踪;你需要告诉NH哪个对象要更新。