J'ai la situation suivante. J'ai un objet Movie qui contient une liste de caractères, et les personnages ont chacun une personne (acteur). De plus, je veux que les objets acteur contiennent une liste de caractères.Problème de mappage Many to Many - Collection d'enfants toujours vide
J'ai configuré mes mappings dans fluent-nhibernate, et tout semble fonctionner parfaitement, sauf que la collection Person.Characters est toujours vide. Ce qui est étrange, c'est que l'objet Characters.Person est rempli correctement et que la collection Movie.Characters est correctement renseignée. C'est juste la Person.Characters qui reste toujours vide.
Voici les applications que je utilise:
public class MovieMap : ClassMap<Movie>
{
public MovieMap()
{
Id(x => x.Id, "movie_id")
.GeneratedBy.Assigned();
Map(x => x.Title);
HasMany<Character>(x => x.Characters)
.KeyColumn("movie_id")
.Inverse()
.Cascade.All()
.Not.LazyLoad();
}
}
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Id(x => x.Id, "person_id")
.GeneratedBy.Assigned();
Map(x => x.Name);
HasMany<Character>(x => x.Characters)
.KeyColumn("person_id")
.Inverse()
.Cascade.All()
.Not.LazyLoad();
}
}
public class CharacterMap : ClassMap<Character>
{
public CharacterMap()
{
Id(x => x.Id)
.GeneratedBy.Native();
Map(x => x.Name);
References(x => x.Movie, "movie_id")
.ForeignKey("movie_id")
.Cascade.All();
References(x => x.Person, "person_id")
.ForeignKey("person_id")
.Cascade.All();
}
}
Et voici mes cours:
public class Person
{
public Person(int id)
{
Id = id;
Characters = new List<Character>();
}
public virtual long Id { get; private set; }
public virtual string Name { get; set; }
public virtual IList<Character> Characters { get; set; }
}
public class Movie
{
public Movie(int Id)
{
Id = id;
Characters = new List<Character>();
}
public virtual long Id { get; private set; }
public virtual string Title { get; set; }
public virtual IList<Character> Characters { get; set; }
}
public class Character
{
public Character()
{
}
public virtual int Id { get; private set; }
public virtual Movie Movie { get; set; }
public virtual Person Person { get; set; }
public virtual string Name { get; set; }
}
La récupération d'un seul acteur génère un objet acteur rempli, mais la liste Actor.Characters est vide. La récupération d'un seul caractère génère un objet caractère correctement rempli, avec Character.Actor renseigné, mais la liste Character.Actor.Characters est vide. –