在我的域驱动设计中,我有一个包含实体,比如Car,它有一个组成实体列表,例如轮。
现在,我想在我的汽车实体中添加一个ChangeWheel方法。请注意,更换滚轮实际上并不会修改汽车实体。它只影响其车轮收集中的一个参与者。即Car实体具有IList属性。在我的数据库模式中,我有一个car实体,它没有引用Wheels - 而是Wheels表有一个CarId的外键。
当我更换汽车的车轮时,我会更新特定的车轮记录。我想要更新的唯一其他表是数据库中的版本审计表。
如果我通过NHibernate从存储库中提取Car实体,调用ChangeWheel(...),然后再次保存,我可以将NHibernate配置为不保存新版本的Car记录吗?
我希望这一切都有道理 - 请问如果没有,请提前致谢。
答案 0 :(得分:1)
NHibernate包含属性集合(如你的情况下的Wheels),它有自己的集合,派生自Iesi.Collections.Generic.ISet。完成此操作后,它可以跟踪对集合的更改,这当然意味着它只发出所需的更新。
请记住,在这种情况下,您应该为Wheel实现Equals和GetHashCode。这是关于实现Equals和GetHashCode的博客文章:
答案 1 :(得分:1)
NHibernate将自然而然地做到这一点。你有一个现有的映射,或者这只是一个假设的东西吗?
答案 2 :(得分:1)
- 当我们从/删除/添加对象时 到一个集合,版本号 集合所有者递增。
但是......您可以尝试保留新添加的Wheel
,但不会保留Car
本身。这应该会产生预期的效果,但NHibernate会始终认为Car
是脏的(注意你的ISession
管理)