i ont x qui un objet de type ObjectX qui possède une propriété ListOfObjectYs thats unEn NHibernate, pas en mesure de mettre à jour la liste des objets enfant
List<objectY>
la cartographie NHibernate ressemble à ceci:
public ObjectXMap()
{
HasMany(x => x.ListOfObjectYs).AsBag().Inverse();
}
quand je vais l'enregistrer, je modifier certaines propriétés sur ObjectX et ensuite :
Session.SaveOrUpdate(x);
maintenant j'ai besoin de mettre à jour cette propriété qui est une liste. Je reçois une nouvelle liste d'objectYs et je veux remplacer la liste existante de objectY par une nouvelle liste. Ai-je besoin de faire ça?
foreach (ObjectY y in x.ListOfObjectYs)
{
Session.Delete(y);
deleted = true;
}
if (deleted)
{
_session.Flush();
}
x.ListOfObjectYs.Clear();
foreach (ObjectY y in newObjectYList)
{
x.ListOfObjectYs.Add(y);
Session.SaveOrUpdate(y);
}
_session.Flush();
mes questions sont les suivantes:
- Dois-je supprimer tout et rincer avant d'ajouter de nouveaux.
- Est-ce que je dois faire tous ces incrémentiel arrêts entre
est-il une meilleure façon de faire cette mise à jour où je dois mettre à jour un objet (propriétés), mais aussi de mettre à jour des propriétés qui sont la liste où il y a une toute nouvelle liste (ce qui signifie que les éléments doivent être supprimés et ajoutés).
comment pouvez-vous faire cela sans réellement enregistrer les objets Y. est votre point, que cascade.AllDeleteOrphan() prend soin de cela ?? – leora
J'obtiens maintenant une erreur: Une collection avec cascade = "all-delete-orphelin" n'était plus référencée par l'instance d'entité propriétaire: ObjectY – leora
Si les objets Y sont nouveaux, vous devez d'abord les enregistrer pour les rendre persistants. Le message d'erreur peut indiquer que vous réaffectez la référence de collection quelque part, voir http://www.sleberknight.com/blog/sleberkn/entry/20070329 et http://stackoverflow.com/questions/2127016/nhibernate-mapping -a-collection-with-cascadeall-delete-orphelin-était-plus-long-r. –