Свободный NHibernate HasManyToMany () IDictionary <> Проблема составного идентификатора - PullRequest
1 голос
/ 15 февраля 2011

Я использую Fluent NHibernate 1.1.1.694, который использует немного другой синтаксис, чем FNH1.0, особенно когда дело доходит до отображения словаря.

В моей модели у меня есть сотрудники, Адреса и типы адресов (почтовые, физические и т. Д.).

public class Employee
{
    // <snip other properties />
    public virtual IDictionary Addresses { get; set; }

    public Employee()
    {
        this.Addresses = new Dictionary();
    }
}

public enum AddressType
{
    Physical,
    Postal
}

public class Address
{
    public virtual int Id { get; private set; }
    public virtual IList Lines { get; set; }
    public virtual string City { get; set; }
    public virtual string Zip { get; set; }
}

Мои сопоставления :

public class EmployeeMap : ClassMap
{
    public EmployeeMap()
    {
        CompositeId()
            .KeyProperty(e => e.IdentityType)
            .KeyProperty(e => e.IdentityValue);

        // <snip other properties />

        HasManyToMany(e => e.Addresses)                
            .Inverse();
    }
}

Создается следующий фрагмент .hbm.xml:1013 *

<map inverse="true" name="Addresses" table="EmployeeAddresses" mutable="true">
    <key>
        <column name="Employee_id" />
    </key>
    <index type="Domain.Entities.AddressType, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
        <column name="Key" />
    </index>
    <many-to-many class="Domain.Entities.Address, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
        <column name="Address_id" />
    </many-to-many>
</map>

.hbm.xml, который я хотел бы создать, это

<map inverse="true" name="Addresses" table="EmployeeAddresses" mutable="true">
    <key>
        <column name="IdentityType" />
        <column name="IdentityValue" />
    </key>
    <index type="Domain.Entities.AddressType, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
        <column name="Key" />
    </index>
    <many-to-many class="Domain.Entities.Address, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
        <column name="Address_id" />
    </many-to-many>
</map>

Очевидно, что это не удастся, потому что я нигде не говорю, что естьсоставной идентификатор для использования в качестве родительского ключа.Но я не могу найти методы, чтобы сказать это..Columns и .ParentKeyColumns не существуют для .HasManyToMany()

Как мне это отобразить?

...