0

我有一个情况,我有一个Common.Domain.PersonSpecific.Domain.PersonNHibernate:完全覆盖基域实体

第一个应该作为一个通用包的一部分提供。
当通用软件包需要定制以满足特定项目的需求时,才会出现第二个软件包。

在对象模型中,它可以很容易地通过继承来实现。
然而,在NH映射中,我遇到了一个小问题。

我可以创建一个NHibernate <subclass>映射,但这需要我使用鉴别器。但是,我知道如果特定人员类是继承的,那么在此特定项目中将不会使用公共类实例。

什么是最好的方式来实现这一点,而不添加鉴别器列到基类(因为没有不同的情况下进行区分)?

+0

你可以映射在3项不同的方式中的继承NHibernate的。你需要一些方法来告诉你想从数据库映射到哪个类。你想如何区分数据库中的两个类? – Paco 2010-05-25 18:44:07

+0

在所描述的情况下,这个表格中永远不会有多于一个类别,所以差异不存在。 – 2010-05-25 18:50:40

+0

比我不明白这个问题。当基类永远不会被使用时,我不明白为什么你需要继承。有了这个描述,我只会创建2个类中的一个。 – Paco 2010-05-25 19:12:06

回答

0

只需映射Specific.Domain.Person并保持Common.Domain.Person不映射。

如果你没有保存它的实例,NHibernate不需要知道它。

+0

这将要求公共程序集的用户重复映射,即使它们不覆盖该类。如果它们覆盖它,如果基类有8个属性并被覆盖1,那么看起来多余且容易出错,使它们再次映射8个原始属性。 – 2010-05-26 06:22:12

+0

容易出错?只需使用相同的hbm并更改文件名。 – 2010-05-26 11:47:47

+0

我明白你的意思,但是有一些问题。关于引用基类的所有其他实体的链接怎么样(但应该作为新实现加载)?所以你基本上建议共用库应该附带一组用户必须修改的单独的hbm文件?在这种情况下,向基础实体添加任何新属性将需要更复杂的迁移过程。 – 2010-05-26 12:44:35