我们想用NHibernate在两个类上映射一个表。映射必须根据列的值动态生成。
这是一个简单的例子,使它更清晰: 我们有一个名为Person的表,列有id,Name和Sex。
此表中的数据应该映射在Male类或Female类上,具体取决于Sex列的值。
在伪代码中:
create instance of Male with data from table Person where Person.Sex = 'm';
create instance of Female with data from table Person where Person.Sex = 'f';
好处是我们有强类型的域模型,以后可以避免使用switch语句。
这可能与NHibernate一起使用,还是我们必须先将Person表映射到一个扁平的Person类?然后我们将不得不使用一个自定义工厂方法,该方法采用一个平坦的Person实例并返回一个Female或Male实例。 如果NHibernate(或其他库)可以处理这个问题会很好。
答案 0 :(得分:9)
这是NHibernate的常见情况。您可以将整个类层次结构映射到单个表中。
您需要指定一个鉴别器值。
<class name="Person">
<id .../>
<discriminator column="Sex" type="string" length="1" />
<property name="Name"/>
<!-- add more Person-specific properties here -->
<subclass name="Male" discriminator-value="m">
<!-- You could add Male-specific properties here. They
will be in the same table as well. Or just leave it empty. -->
</subclass>
<subclass name="Female" discriminator-value="f">
<!-- You could add Female-specific properties here. They
will be in the same table as well. Or just leave it empty. -->
</subclass>
</class>