Я довольно новичок в NHibernate, и у меня есть эта проблема, когда мне нужно два столбца из таблицы расширений, которые должны присутствовать на <joined-subclass>
в моем сопоставлении NHibernate, но у меня есть труднее всего найти соответствующую реализацию.NHibernate <Join> в рамках <объединенного подкласса> или альтернативы
Ниже приведена упрощенная версия моей реализации и то, что я изначально думал, было бы способом выполнить то, что мне нужно, но NHibernate не разрешает <join>
в пределах <joined-subclass>
.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Sample.NHibernate"
namespace="Sample.NHibernate.ProgramAssociationAggregate"
default-access="property">
<!-- Class definition -->
<class name="ProgramAssociation" table="ProgramAssociation" lazy="false">
<!-- Composite primary key -->
<composite-id>
<key-property name="BeginDate" column="BeginDate" type="date" />
<key-property name="OrganizationId" column="OrganizationId" type="int" />
<key-property name="ProgramName" column="ProgramName" type="string" length="60" />
<key-property name="ProgramTypeId" column="ProgramTypeId" type="int" />
<key-property name="PersonId" column="PersonId" type="int" />
</composite-id>
<!-- Optimistic locking for aggregate root -->
<version name="LastModifiedDate" column="LastModifiedDate" type="timestamp" />
<!-- Transient state detection -->
<property name="CreateDate" column="CreateDate" type="DateTime" not-null="true" />
<!-- Unique Guid-based identifier for aggregate root -->
<property name="Id" column="Id" type="guid" not-null="true" />
<!-- Properties -->
<property name="EndDate" column="EndDate" type="date" />
<!-- Derived classes -->
<joined-subclass name="Sample.NHibernate.ProgramAssociationAggregate.SpecialProgramAssociation" table="SpecialProgramAssociation" lazy="false">
<key>
<column name="BeginDate" />
<column name="OrganizationId" />
<column name="ProgramName" />
<column name="ProgramTypeId" />
<column name="PersonId" />
</key>
<!-- PK properties -->
<property name="PersonId" column="PersonId" type="int" not-null="true" insert="false" />
<property name="ProgramTypeId" column="ProgramTypeId" type="int" not-null="true" insert="false" />
<property name="BeginDate" column="BeginDate" type="date" not-null="true" insert="false" />
<property name="ProgramName" column="ProgramName" type="string" length="60" not-null="true" insert="false" />
<property name="OrganizationId" column="OrganizationId" type="int" not-null="true" insert="false" />
<!-- Properties -->
<property name="IEPReviewDate" column="IEPReviewDate" type="date" />
<property name="IEPBeginDate" column="IEPBeginDate" type="date" />
<property name="IEPEndDate" column="IEPEndDate" type="date" />
<!-- Trying to join this table, but NHibernate does not allow for this. What is the best way to accomplish essentially the same thing? -->
<join table="SpecialProgramAssociationExtension" schema="extension">
<key>
<column name="BeginDate" />
<column name="OrganizationId" />
<column name="ProgramName" />
<column name="ProgramTypeId" />
<column name="PersonId" />
</key>
<property name="IEPEventCode"/>
<property name="WrittenConsentDate" type="date"/>
</join>
</joined-subclass>
</class>
</hibernate-mapping>
Кто-нибудь, у кого больше опыта работы с NHibernate, знает способ сделать то, что мне нужно?
В последнее время я использовал this NHibernate resource, но это не оказалось очень полезным для этого затруднительного положения.
Любые советы или ресурсы, на которые можно было бы указать мне, были бы весьма признательны.
спасибо.
Просто примечание стороны: не используйте составные клавиши, если вы не можете изменить модель базы данных. Он поддерживается только для этого случая. У этого есть много обратных сторон и не стоит возиться с, когда Вы можете избежать этого. –