У меня есть базовый класс для элементов контента в CMS, который я создаю. В настоящее время он является абстрактным, потому что я хочу, чтобы производные классы были созданы. Производные классы, такие как BlogPost, Article, Photo и т. Д., Настроены как объединенный подкласс к моему классу ContentBase в nHibernate.В nHibernate можно ли сопоставить абстрактный базовый класс с коллекцией?
Я пытаюсь настроить сопоставление «многие-ко-многим» между этим классом и классом тегов. Я хочу иметь набор тегов в классе ContentBase и набор элементов ContentBase в классе тегов.
Будет ли nHibernate разрешать мне отображать абстрактный класс ContentBase в виде коллекции класса Tag? Я предполагаю, что нет, поскольку он не сможет создавать экземпляры этого класса при восстановлении объекта тега из db. Я действительно не хочу, чтобы вам приходилось использовать набор элементов контента для каждого типа (например, TaggedBlogPosts, TaggedArticles и т. Д.) В классе Tag.
Вся причина, по которой я делаю это, состоит в том, что логически элемент контента может иметь много тегов, а 1 тег может принадлежать нескольким элементам контента. для того, чтобы nHibernate управлял отношениями для меня в таблице сопоставлений, я считаю, что мне нужно настроить ассоциацию «многие-ко-многим» и добавить тег в коллекцию ContentBase.Tags, а затем элемент контента в коллекцию Tags.TaggedContentItems перед созданием записи таблицы сопоставления в nHibernate.
Вот мои отображения для справки:
<class name="CMS.Core.Model.Tag,CMS.Core" table="bp_Tags">
<id column="TagName" name="TagName" type="String" unsaved-value="">
<generator class="assigned" />
</id>
<bag name="_taggedContentList" table="bp_Tags_Mappings" inverse="true" cascade="save-update" lazy="true">
<key column="TagName" />
<many-to-many class="CMS.Core.Model.ContentBase,CMS.Core" column="Target_Id" />
</bag>
</class>
<class name="CMS.Core.Model.ContentBase,CMS.Core" table="bp_Content">
<id name="Id" column="Id" type="Int32" unsaved-value="0">
<generator class="native"></generator>
</id>
<property name="SubmittedBy" column="SubmittedBy" type="string" length="256" not-null="true" />
<property name="SubmittedDate" column="SubmittedDate" type="datetime" not-null="true" />
<property name="PublishDate" column="PublishDate" type="datetime" not-null="true" />
<property name="State" column="State" type="CMS.Core.Model.ContentStates,CMS.Core" not-null="true" />
<property name="ContentType" column="ContentType" type="CMS.Core.Model.ContentTypes,CMS.Core" not-null="true" />
<bag name="_tagsList" table="bp_Tags_Mappings" lazy="false" cascade="save-update">
<key column="Target_Id" />
<many-to-many class="CMS.Core.Model.Tag,CMS.Core" column="TagName" lazy="false" />
</bag>
...
<joined-subclass name="CMS.Core.Model.BlogPost,CMS.Core" table="bp_Content_BlogPosts" >
<key column="Id" />
<property name="Body" type="string" column="Body" />
<property name="Title" type="string" column="Title" />
</joined-subclass>
...