代码之家  ›  专栏  ›  技术社区  ›  ng5000

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

  •  0
  • ng5000  · 技术社区  · 16 年前

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

    现在,我想向我的汽车实体添加一个ChangeWheel方法。请注意,更改车轮实际上不会修改汽车实体。它只影响其控制盘集合中的一个实体。一、 e.Car实体具有IList属性。在我的数据库模式中,我有一个car实体,它没有对Wheels的引用,相反,Wheels表有一个CarId外键。

    当我更换汽车的车轮时,我会更新特定的车轮记录。我要更新的另一个表是数据库中的版本审核表。

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

    我希望所有这些都有意义-如果没有请询问,并提前感谢。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Praveen Angyan    16 年前

    NHibernate将属于集合的属性(如案例中的轮子)封装为自己的集合,该集合源自Iesi。收藏。通用的ISet。完成后,它可以跟踪对集合的更改,这当然意味着它只发布所需的更新。

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

    Implemeting Equals and GetHashCode

        2
  •  1
  •   Shane Courtrille    16 年前

    NHibernate会很自然地做到这一点。您是否有现有映射,或者这只是一个假设?

        3
  •  1
  •   Vijay Patel    16 年前

    NHibernate docs :

    • 当我们从中删除/添加对象时/ 对于集合,版本号为 集合所有者将递增。

    然而您可以尝试将新添加的 Wheel 但是 坚持 Car 它本身这应该会产生预期的效果,但NHibernate将始终考虑 汽车 脏兮兮的(看着你的 ISession 管理层)