Вы не можете сопоставить таблицу ссылок с автоматом, если она содержит любые поля, отличные от двух идентификаторов, составляющих составной идентификатор. В вашем случае ваша таблица Party имеет поле Id, которое нарушает правила автомашинки, потому что оно не хорошо спроектировано (то есть, составной идентификатор не должен иметь идентификатор с автоматическим добавлением, хотя мы делаем это для индексирования, где я работаю).
Чтобы исправить это, вам просто нужно создать ClassMap для Party и отобразить Id как идентификатор и ссылку Person и Organization.
Затем, в объектах Person и Organization вместо создания сопоставления HasManyToMany для Party вы должны создать HasMany для участника партии.
Действительно, то, что вы делаете, явно соответствует коду, чтобы больше походить на ERD, тогда как автоматизация подразумевает отношения «многие ко многим» через таблицу ссылок, только если она содержит только составной первичный ключ.
Это загломило меня в течение трех дней, и я взял этот маршрут как «взломать», но только позже прочитал это объяснение в группе Google Fluent NHibernate пару недель назад.
Я надеюсь, что это поможет, если нет, я могу скомпоновать код для вас.
См. Также my post about the same situation.
редактировать:
Вот как это будет выглядеть на довольно высоком уровне. Помните, что вам придется инициализировать свои коллекции в конструкторах объектов и создавать методы настройки. См Getting Started
public class Party {
public virtual int Id { get; set; }
public virtual Person Person { get; set; }
public virtual Organization Organization { get; set; }
}
public class PartyMap : ClassMap<Party> {
public PartyMap() {
Id(x => x.Id);
References(x => x.Person);
References(x => x.Organization);
}
}
public class Person {
public virtual int Id { get; set; }
public virtual string FName { get; set; }
public virtual string LName { get; set; }
public virtual ICollection<Party> Parties { get; set; }
}
public class PersonMap : ClassMap<Person> {
public PersonMap() {
Id(x => x.Id);
Map(x => x.FName);
Map(x => x.LName);
HasMany(x => x.Parties);
}
}
public class Organization {
public virtual int Id { get; set; }
public virtual string OrgName { get; set; }
public virtual string OrgDescription { get; set; }
public virtual ICollection<Party> Parties { get; set; }
}
public class OrganizationMap : ClassMap<Organization> {
public OrganizationMap() {
Id(x => x.Id);
Map(x => x.OrgName);
Map(x => x.OrgDescription);
HasMany(x => x.Parties);
}
}
Список литературы (х => x.Person, "PersonId") Not.Nullable(). Ссылки (x => x.Organization, "OrganizationId"). Not.Nullable(); Не работает? – jweyrich