4

1対多の住所や連絡先など、他のいくつかのエンティティと、いくつかのフィールド(名前、年齢など)で構成される従業員エンティティがあるとします。このエンティティをマッピングして問題なく使用し、各部分を「Employee」、「EmployeeAddresses」、および「EmployeeContacts」テーブルに保存します。

ただし、この従業員の情報のほとんどすべてを大規模な計算に使用し、同じAddressオブジェクトリストとContactオブジェクトリストで構成される個別の「EmployeeInput」オブジェクトを用意しています(つまり、EmployeeオブジェクトとEmployeeInputsオブジェクトの両方にAddressエンティティとContactエンティティのリストがあります)。後で監査するために計算を実行するときに、この情報を保存する必要があります。このEmployeeInputエンティティをデータベースの「EmployeeInput」テーブルに保存します。

私たちが直面している問題は、住所リストと連絡先リストをどのように保存するかです。それらを「EmployeeInputAddresses」や「EmployeeInputContacts」のようなものに固定したいのですが、AddressエンティティとContactエンティティはすでにそれぞれ「EmployeeAddresses」と「EmployeeContacts」にマップされています。

新しい「EmployeeInputAddress」エンティティと「EmployeeInputContact」エンティティを作成せずに、これを実現する最も簡単な方法は、それぞれに個別のマッピングファイルを作成することです(フィールドは文字通り1つずつ複製されるため)。言い換えると、単一のエンティティAddressを、それが属する親オブジェクトに応じて2つの異なるテーブルにマップするにはどうすればよいですか(Employeeオブジェクトから保存する場合はEmployeeAddressesテーブル、EmployeeInputオブジェクトから保存する場合はEmployeeInputAddressesテーブル)。

4

1 に答える 1

5

最も簡単な方法は、住所と連絡先を複合要素としてマップすることです。そうすれば、マッピングはコンテナーによって所有されるEmployeeため、コレクションを異なる方法でマップすることができます。EmployeeInput

例えば:

public class Employee
{
    public List<Address> Addresses{get; set;}
}


public class EmployeeInput
{
    public List<Address> Addresses{get; set;}
}

public class Address
{
    public string Street{get;set;}
    public string City{get; set;}
}

次のマッピングがあります。

<class name="Employee" table="Employees">
    <id name="id">
        <generator class="native"/?
    </id>
    <list name="Addresses" table="EmployesAddresses">
        <key column="Id" />
        <index column="Item_Index" />
        <composite-element class="Address">
            <property name="Street" />
            <property name="City" />
        </composite-element>
    </list>
</class>

<class name="EmployeeInput" table="EmployeesInput">
    <id name="id">
        <generator class="native"/?
    </id>
    <list name="Addresses" table="EmployeesInputAddresses">
        <key column="Id" />
        <index column="Item_Index" />
        <composite-element class="Address">
            <property name="Street" />
            <property name="City" />
        </composite-element>
    </list>
</class>
于 2009-02-17T19:09:07.150 に答える