Vous ne pouvez pas mapper une table de liaison avec la conversion automatique si elle contient des champs autres que les deux ID qui composent l'ID composite. Dans votre cas, votre table Party a un champ Id qui interrompt les règles d'auto-construction car elle n'est pas bien conçue (un ID composite ne doit pas avoir d'identifiant auto-incrémenté, bien que nous le fassions pour l'indexation). Pour résoudre ce problème, il vous suffira de créer un ClassMap for Party et de mapper Id en tant que Id et référence Person and Organization. Puis, dans vos entités Personne et Organisation, au lieu de créer un mappage HasManyToMany à Partie, vous créez un HasMany à l'entité Partie. Vraiment, ce que vous faites correspond explicitement au code pour ressembler plus à ERD, alors que l'automappage implique des relations plusieurs-à-plusieurs via une table de liens uniquement s'il ne contient qu'une clé primaire composite. Cela m'a stupéfié pendant trois jours et j'ai pris cette route comme un "hack", seulement pour lire plus tard cette explication dans le groupe google de Fluent NHibernate il y a quelques semaines.
J'espère que cela aide, sinon je peux jeter ensemble du code pour vous. Voir aussi my post about the same situation.
modifier:
Voici comment cela ressemblerait à un niveau assez élevé. Rappelez-vous, vous devrez initialiser vos collections dans vos constructeurs d'entités et créer des méthodes setter. Voir 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);
}
}
Références (x => x.Personnel, "PersonId"). Not.Nullable(); Références (x => x.Organization, "OrganizationId"). Not.Nullable(); Ne fonctionne pas? – jweyrich