Я использую 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()
Как мне это отобразить?