[NHibernate]如何将多个对象类型映射到一个表?

时间:2009-06-06 22:41:02

标签: c# .net nhibernate orm

我的对象模型代表播客Feed,包含频道数据和Feed项(单个播客)。其结构如下:

PodcastFeed
    ChannelData // Property on PodcastFeed
        ITunesChannelData // Property on ChannelData
    FeedItems // Property on PodcastFeed; collection of PodcastFeedItems

PodcastFeedItem
    ITunesItemData // Property on PodcastFeedItem

在我的数据库中,PodcastFeed,ChannelData和ITunesChannelData上的字段都存储在一个表中;同样,PodcastFeedItem和ITunesItemData上的字段都存储在一个表中。从PodcastFeed到PodcastFeedItem有一对多的关系。以这种方式存储它们的原因是因为在不同对象类型之间存在一对一映射(例如,ChannelData对于每个播客馈送是唯一的)。

我对PodcastFeed到PodcastFeedItem的映射没有问题,但我无法弄清楚如何完成如何在构成PodcastFeed的不同类中“分割”Feeds表中的数据。我已经成功地从Feeds表创建了NHibernate映射到这些类型,但是当我访问PodcastFeed对象时,ChannelData属性为null。据推测这是因为NHibernate不知道如上所述创建层次结构。

FWIW,我在我的映射文件中尝试了以下行但没有成功(NHibernate尝试从表中不存在的“ChannelData”列加载数据)。

<property name="ChannelData" type="ChannelData" />

我是否需要在NHibernate中创建用户类型才能启用此功能,或者我是否缺少一些内置技巧?

2 个答案:

答案 0 :(得分:2)

解决此问题的方法是使用component mapping<component />映射元素将允许<class />级别的可用映射类型,从而允许复杂的方案。

答案 1 :(得分:0)

您正在寻找的是TPH,每层次表,映射。这是您在数据库中有一个映射到对象层次结构的表,由某种键区分。

以下文档应该有用: https://www.hibernate.org/hib_docs/nhibernate/html/inheritance.html