领域驱动设计,包含实体和NHibernate持久性

时间:2009-06-10 14:53:48

标签: c# java domain-driven-design

在我的域驱动设计中,我有一个包含实体,比如Car,它有一个组成实体列表,例如轮。

现在,我想在我的汽车实体中添加一个ChangeWheel方法。请注意,更换滚轮实际上并不会修改汽车实体。它只影响其车轮收集中的一个参与者。即Car实体具有IList属性。在我的数据库模式中,我有一个car实体,它没有引用Wheels - 而是Wheels表有一个CarId的外键。

当我更换汽车的车轮时,我会更新特定的车轮记录。我想要更新的唯一其他表是数据库中的版本审计表。

如果我通过NHibernate从存储库中提取Car实体,调用ChangeWheel(...),然后再次保存,我可以将NHibernate配置为不保存新版本的Car记录吗?

我希望这一切都有道理 - 请问如果没有,请提前致谢。

3 个答案:

答案 0 :(得分:1)

NHibernate包含属性集合(如你的情况下的Wheels),它有自己的集合,派生自Iesi.Collections.Generic.ISet。完成此操作后,它可以跟踪对集合的更改,这当然意味着它只发出所需的更新。

请记住,在这种情况下,您应该为Wheel实现Equals和GetHashCode。这是关于实现Equals和GetHashCode的博客文章:

Implemeting Equals and GetHashCode

答案 1 :(得分:1)

NHibernate将自然而然地做到这一点。你有一个现有的映射,或者这只是一个假设的东西吗?

答案 2 :(得分:1)

来自NHibernate docs

  
      
  • 当我们从/删除/添加对象时   到一个集合,版本号   集合所有者递增。
  •   

但是......您可以尝试保留新添加的Wheel,但会保留Car本身。这应该会产生预期的效果,但NHibernate会始终认为Car是脏的(注意你的ISession管理)