我已经阅读了NHibernate - Changing sub-types,但我发现情况并不令人满意。
我的系统允许用户安排工作。可以使用不同类型的计划标准(仅一次,每日,每周,每月按月,按月按月)设置计划。每个都有非常不同的数据和行为。用户将计划从一种标准类型更改为另一种标准类型是完全有效的。
我尝试通过抓取之前保存的计划ID,使用新类型创建计划的新实例,设置ID和保存来尝试完成此工作。所有数据都按预期更新,当然除了鉴别器。
改变我的模型绝对是最后的手段。
此时,我正在考虑保存新条件(使用新ID)并更新对它的引用,然后删除旧条件。
有人有更好的主意吗?
答案 0 :(得分:0)
您是否尝试过修改您的鉴别器映射以添加force = true,如下面的hbm.xml元素
<discriminator column="DiscriminatorColumnName" force="true" />
答案 1 :(得分:0)
由于您已经在弯曲NHibernate对象标识视图,为什么不使用一些自定义SQL在NHib之外更新它?
我首选的解决方案是更新我的模型,但您已经说过这是最后的选择。
答案 2 :(得分:0)
如果你想使用NHibernate,那么你必须做出的让步是:
编写面向对象的代码。
如果你的特定情况很难以面向对象的方式表达,那么你不应该在这种情况下使用NHibernate。
对于您的情况,您应该:
Schedule
的类的新实例,并允许它有一个新的ID
Schedule
实例Schedule
中删除旧的Session
实例,并确保相关的Job
实例未引用它Schedule
实例添加到Session
,并确保有问题的Job
实例引用它这将在数据库级别以delete
和insert
而不是update
结束。
这不是万不得已的。这应该是您的第一个度假胜地。这是从面向对象的角度来看的正确方法。