Utilisation de NHibernate 2.0, attributs de classe NHibernate pour les mappages, ASP.NET MVC pour créer une application de type tableau de messages.NHibernate - objet enfant est null
J'ai 2 entités, poste et utilisateur. La publication a une propriété propriétaire qui est une instance de l'utilisateur. Il a également une propriété Replies qui est une collection de type ISet.
L'idée est qu'un poste peut avoir un niveau de réponses, le même qu'un message SO avec des commentaires. Ma page MVC utilise une vue partielle (de type Mvc.ViewUserControl) pour afficher les messages de niveau supérieur (parent). La vue partielle ParentPost utilise à son tour une vue partielle ChildPost (également de type Mvc.ViewUserControl) pour afficher les réponses (balisage d'affichage différent pour les réponses).
Tout fonctionne très bien, sauf que les instances Propriétaire de type Utilisateur sont null dans la collection Réponses. Ils sont très bien chargés dans la collection parent. En d'autres termes, au niveau parent, toutes les propriétés sont chargées correctement, y compris le propriétaire de la publication. Dans la collection Réponses, les messages de réponse sont chargés avec toutes les propriétés sauf pour leurs propriétaires. Pour ce que ça vaut, Owner est la seule propriété de classe de Post. Est-ce que quelqu'un peut m'aider à comprendre comment faire pour que NHibernate charge les instances Owner dans la collection Replies?
Voici la cartographie pertinente pour la Poste:
[Class(Table="t_Posts",Lazy=false)]
public class Post : IPost
{
[Id(Name = "PostId")]
public virtual long PostId { get; set; }
[Property(Column="OwnerID")]
public virtual long OwnerId { get; set; }
[Property(Column="DatePosted")]
public virtual DateTime DatePosted { get; set; }
[OneToOne(0,ForeignKey="OwnerId",Lazy=Laziness.False,ClassType=typeof(User))]
public virtual IUser Owner { get; set; }
[Property(Column="ParentID")]
public virtual long ParentId { get; set; }
[Set(0,Name="Replies",Inverse=true,Cascade="all-delete-orphan", Lazy=false)]
[Key(1,Column="ParentId")]
[OneToMany(2,ClassType=typeof(Post))]
public virtual ISet<Post> Replies{ get; set; }
}
Voici la cartographie pertinente pour l'utilisateur:
[Class(Lazy=false,Table="t_Users")]
public class User : IUser
{
[Id(Name="UserId")]
public virtual long UserId { get; set; }
[Property(Column="LoginName")]
public virtual string LoginName { get; set; }
}
Ah, merci! C'était ça. Première fois avec NHibernate, ça me rendait fou. Je pense que je vais revenir en arrière et lire à nouveau les chapitres de l'association :) BTW- merci pour la note sur le OwnerID. Je sais que je n'avais pas besoin de ça, c'est juste là quand j'essayais juste de charger Post avant de descendre le chemin de l'association. Merci encore!!! – squillman