У меня есть эти устаревшие таблицы, к которым я получаю доступ с помощью nhibernate, базовый доступ к одной сущности - это нормально, но мне действительно нужно, чтобы объединения работали.
В идеале у меня был бы первичный и внешний ключ для определения объединений, но поскольку это устаревшие таблицы, у меня есть только составные идентификаторы, которые являются индексами для таблиц, индексы, которые использовались для повышения производительности, поэтому я не могу измениться.
В любом случае у меня есть таблица JobHeader и таблица свойств
В данный момент отображение JobHeader выглядит примерно так:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="JobHeader " dynamic-update="true" table="JOB_HEADER">
<composite-id>
<key-property name="Company" column="JBH_COMPANY" type="String(6)" />
<key-property name="ContractRef" column="JBH_CONTRACT_REF" type="String(10)" />
<key-property name="JobRef" column="JBH_JOB_REF" type="String(10)" />
<key-property name="Status" column="JBH_STATUS" type="String(10)" />
</composite-id>
<property name="RowId" column="TK_ROWID" type="Int32" not-null="true" />
<property name="PropRef" column="JBH_PROP_REF" type="String(20)" not-null="false" />
</class>
</hibernate-mapping>
И отображение свойств выглядит так:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Property" dynamic-update="true" table="PROPERTY">
<composite-id>
<key-property name="Company" column="PRP_COMPANY" type="String(6)" />
<key-property name="Reference" column="PRP_REFERENCE" type="String(20)" />
</composite-id>
<property name="RowId" column="TK_ROWID" type="Int32" not-null="true" />
<property name="Name" column="PRP_NAME" type="String(40)" not-null="false" />
</class>
</hibernate-mapping>
В Jobheader он использует «PropRef» для хранения свойства «Ссылка».
Я хотел бы создать новый файл сопоставления, который будет называться JobHeaderJoinedProperty
И поэтому, возможно, будет выглядеть примерно так:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="JobHeaderJoinProperty" dynamic-update="true" table="JOB_HEADER">
<composite-id>
<key-property name="Company" column="JBH_COMPANY" type="String(6)" />
<key-property name="ContractRef" column="JBH_CONTRACT_REF" type="String(10)" />
<key-property name="JobRef" column="JBH_JOB_REF" type="String(10)" />
<key-property name="Status" column="JBH_STATUS" type="String(10)" />
</composite-id>
<property name="RowId" column="TK_ROWID" type="Int32" not-null="true" />
<property name="PropRef" column="JBH_PROP_REF" type="String(20)" not-null="false" /> </class>
<bag name="Property" fetch="join" >
<key column="Reference" property-ref="PropRef" />
<one-to-one class="Property"/>
</bag>
</class>
</hibernate-mapping>
Тогда надеемся, что моя сущность JobHeaderJoinedProperty сможет получить доступ к сущности Property со следующим:
public virtual Property Property
{
get
{
return this.property;
}
set
{
this.property = value;
}
}
Соединение двух устаревших таблиц через nhibernate не должно быть слишком сложным, верно?!
Я просто хочу скопировать внутреннее соединение, где sql будет выглядеть так:
Select * from job_header inner join property on property.reference = job_header.propref