2009-03-16 10 views
2

Disons que je cours comme celui-ci:NHibernate - parent économie quand j'ai ID d'Enfants ne

public class Parent 
{ 
    public int ParentId {get;set;} 
    public IList<Child> Children {get;set;} 
    public string Name {get;set;} 
} 

public class Child 
{ 
    public int ChildId {get;set;} 
} 

Quelqu'un appelle une méthode pour enregistrer un nouveau parent et me passe un nom et une liste d'ID enfant, et je veux sauver le parent. Est-il possible que je peux sauver le parent et associer les ID d'enfant à elle sans charger les objets enfants, puis les ajouter à la collection des enfants? Il semble comme un gaspillage de charger des objets juste pour que je puisse obtenir NHibernate pour les sauver quand je l'ai déjà les ID, ce qui serait tout ce que je aurais besoin de sauver la mère si je l'ai fait dans une procédure stockée.

en utilisant ... NHibernate 2.0.1GA, SQL Server 2005

Jon

Répondre

0

Vous pouvez mapper une collection d'entiers (à savoir Parent.Children comme IList <int>), ou vous pouvez mapper une collection d'objets (à savoir Parent.Children comme IList <enfant>). Si vous associez les objets, vous devez mettre à jour la base de données en utilisant des objets, à savoir que vous devrez charger les objets enfants pour sauver la mère. Si vous choisissez de mapper les ID entiers à la place, vous pouvez mettre à jour via des ID.

PS. Si vos ID sont d'un autre type primitif (par exemple guids, chaînes, etc.), le même argument s'applique toujours.

0

Si le parent est associé aux enfants alors il devrait y avoir une propriété Parent dans chaque enfant (que je n » t voir) et vous devrez mettre à jour les enfants de toute façon, donc vous devrez charger tous les enfants de la base de données.

Sinon, comment est la relation entre le parent et les enfants persistaient? Si ce n'est pas seulement enregistrer le parent avec la propriété Name et ne même pas déranger avec les enfants.

1

Quelque chose comme ça fonctionne, je pense

var child1 = Session.Load<Child>(12); 
var child2 =Session.Load<Child>(23); 
var parent = Session.Get(253); 
parent.Name = "new parent name"; 
parent.Children.Add(child1); 
parent.Children.Add(child2); 

Lorsque la charge est appelée elle ne va pas à la base de données pour obtenir les données jusqu'à ce qu'il soit effectivement accès, donc j'imagine ce serait aussi faire l'affaire pour toi.

Questions connexes