我正在尝试使用NHibernate 2.0将2个现有数据模型的数据转换为单个通用模型。我目前正在尝试为两个现有数据库中的一个创建映射。
当患者只有一台设备时,可能会有多次遭遇。我正在尝试为每次遭遇提取数据。我想基于单个遭遇和设备组合从四个子表中的每一个获取属性。我现在正在尝试编写映射以从四个子表中获取我的属性。 (我编写了一个存储过程,它获取了所有属性并将@deviceID和@encounterID作为参数,认为这可能更容易,但我不清楚如何使其工作。)
我创建了一个类ProgrammingContainer来获取所有这些数据,因此我可以将它输出到新模型中的ProgrammingEncounter表中。这是一个问题:如何设置映射,因此我可以将内容放入ProgrammingContainer对象中,该对象根据复合键从子表中获取数据?在这种情况下,我的存储过程是否接近愚蠢?我似乎无法根据我的复合键情况找到一个可行的示例。
这是我当前的映射文件。首先是Encounter对象。
<property name="EncounterDate" column="event_date" type="datetime" />
<property name="EncounterStatus" column="event_status" type="AnsiString" />
<property name="PatientID" column="patient_id" type="int" />
<many-to-one name="programmingContainer" class="ProgrammingContainer" column="event_id" lazy="false" fetch="join" access="field"/>
ProgrammingContainer:
<class name="ProgrammingContainer" table="event" where="" dynamic-update="true" dynamic-insert="true">
<composite-id>
<key-property name="EncounterID" column="event_id" type="Int32"/>
<key-property name="PatientID" column="patient_id" type="Int32"/>
</composite-id>
<bag name="devices" cascade="all" access="field">
<key column="patient_id"/>
<one-to-many class="Device"/>
</bag >
<property name="DeviceID" column="defibrillator_id" type="Int32" />
<many-to-one name="icdProgrammingData" class="IcdProgrammingData" column="patient_id" lazy="false" access="field"/>
IcdProgrammingData(调用存储过程的子对象)
<hibernate-mapping>
<property name="BatteryChargeSeconds" column="charge_time" type="AnsiString" />
<property name="AutoCapFrequency" column="autocap_frequency" type="AnsiString" />
<property name="LastCapacitorFormDate" column="last_capacitor_form" type="DateTime" />
(我不知道如何让sql-query映射显示出来)