使用NHibernate在两组表中保存相同的类结构

时间:2009-10-14 23:06:16

标签: nhibernate

我有一个像这样的模拟类heirachy的场景

  • 顺序
    • 订单行
    • 产品
  • 客户
    • OrderNotes

创建一些表格,如

  • 客户
  • 产品
  • CustomerOrderNotes(CustomerId,OrderId)
  • 订单(CustomerId)
    • OrderLines(OrderId,ProductId)

我已将其映射到NHibernate,一切正常。

所以现在我想创建这个对象heirachy的编辑版本,并将其持久保存到数据库中。

我正在使用asp.net并希望将编辑更改保存到单独的行中,然后仅在推送发布时将更改提交到实时行。 (我打算从编辑数据到实时数据进行复制)

使用相同的对象模型是否可以将编辑数据存储在单独的表中?

如果不是,我可以创建一个源自Order的EditOrder类,但EditOrder仍会指向OrderLine和Customer。因此,OrderLine和Customer的任何更改都将保存到实时行。 对于NHibernate,似乎我需要创建一个单独的heirachy

  • EditOrder
    • EditOrderLine
    • EditProduct
  • EditCustomer
    • EditCustomerNotes

没有创建一个通用的庞然大物让你定义这个heirachy中使用的每个类我不知道要走哪条路。

我真的想使用一个类heirachy,而不是维持两个类heirachies。

另一个选项是将对象heirachy序列化为编辑到用户类。但是,如果其中一个类更改,我将不得不消除数据,而不是运行数据库迁移脚本。

另一种解决方案是使用具有不同映射文件的另一个数据库/会话工厂。

处理这样的场景的推荐方法是什么?

1 个答案:

答案 0 :(得分:0)

这两组表格支持两种不同的状态(已发布/正在等待批准(或类似))。

如果可能,我建议在模型中明确显示此状态,并将所有内容保存在同一个表中。

然后,已发布对象的客户端必须以某种方式排除未发布的对象。