NHibernate Fluent plusieurs-à-Plusieurs
J'utilise Couramment NHibernate et avoir quelques problèmes de l'obtention d'un beaucoup de beaucoup de relation d'installation avec une de mes classes. C'est probablement une erreur stupide, mais j'ai été coincé dans un peu d'essayer de le faire fonctionner. De toute façon, j'ai deux classes qui ont Beaucoup de relations.
public class Person
{
public Person()
{
GroupsOwned = new List<Groups>();
}
public virtual IList<Groups> GroupsOwned { get; set; }
}
public class Groups
{
public Groups()
{
Admins= new List<Person>();
}
public virtual IList<Person> Admins{ get; set; }
}
Avec la cartographie de ressembler à ce
Personne: ...
HasManyToMany<Groups>(x => x.GroupsOwned)
.WithTableName("GroupAdministrators")
.WithParentKeyColumn("PersonID")
.WithChildKeyColumn("GroupID")
.Cascade.SaveUpdate();
Groupes: ...
HasManyToMany<Person>(x => x.Admins)
.WithTableName("GroupAdministrators")
.WithParentKeyColumn("GroupID")
.WithChildKeyColumn("PersonID")
.Cascade.SaveUpdate();
Quand je lance mon test d'intégration, fondamentalement, je suis en création d'une nouvelle personne et de groupe. L'ajout du Groupe de la Personne.GroupsOwned. Si je reçois la Personne Objet de retour à partir du référentiel, la GroupsOwned est égale à la première du groupe, cependant, quand je reçois le groupe à revenir si je vérifier compter sur le Groupe.Admins, le nombre est 0. La table de Jointure a le GroupID et la PersonID enregistré.
Merci pour tous les conseils que vous pourriez avoir.
Vous devez vous connecter pour publier un commentaire.
Le fait que c'est l'ajout de deux enregistrements à la table ressemble il vous manque une attribut inverse. Depuis la fois la personne et le groupe sont en train d'être changé, NHibernate est la persistance de la relation à deux fois (une fois pour chaque objet). L'attribut inverse est précisément pour éviter ce problème.
Je ne suis pas sûr de savoir comment l'ajouter dans la cartographie dans le code, mais le lien qui montre comment le faire en XML.
@Santiago, je pense que vous avez raison.
La réponse est peut-être que vous avez besoin de supprimer un de vos ManyToMany déclarations, à regarder plus Couramment, on dirait qu'il pourrait être assez intelligent pour juste le faire pour vous.
Êtes-vous sûr d'ajouter la Personne pour les Groupes.Admin? Vous devez faire les deux liens.
Vous avez trois tables de droite?
Personnes, des Groupes et des GroupAdministrators
lorsque vous ajoutez des deux côtés, vous obtenez
Personnes (avec un id de p1)
Groupes (avec un id de g1)
et dans GroupAdministrators vous avez deux colonnes et une table qui a
(p1,g1)
(p1,g1)
et votre code de test unitaire ressemble à la suivante.
Et puis dans votre test vous faire un nouveau contexte, et de tester pour voir ce qui est dans le contexte, et vous obtenez de nouveau le droit de chose, mais vos tables sont toutes cachées jusqu'?