En utilisant NHibernate, je cherche un moyen de mettre à jour automatiquement les collections persistantes lorsqu'un élément persistant est supprimé. Par exemple:NHibernate: Supprimer automatiquement un élément d'une collection persistante
var post = GetNewPost();
var blog = GetCurrentBlog();
blog.Posts.Add(post);
BlogRepository.Update(blog);
User.Posts.Add(post);
UserRepository.Update(user);
----
// Somewhere else
var blog = GetCurrentBlog();
var post = blog.Posts.Last();
blog.Posts.Remove(post);
NHibSession.Flush(); // Throws an ObjectDeletedException due to 'post'
// still being in the User.Posts collection
Je comprends qu'il peut y avoir des problèmes avec le modèle et/ou la cartographie dans cet exemple, mais ces questions de côté, je veux trouver un moyen d'obtenir la collection User.Posts soit automatiquement mis à jour , c'est-à-dire supprimer "post" de lui-même. (Peut-être pas le meilleur exemple au monde, mais supposons qu'il existe de nombreux blogs et de nombreux utilisateurs, sans lien les uns avec les autres, à travers les messages.)
Dans cet exemple, je n'utilise qu'un seul NHibernate session. Je suis prêt à ajuster cela, mais je suis à la recherche d'un régime, et il devrait être transparent pour le modèle. Les événements NHibernate sont également sur la table s'il peut être démontré que c'est une bonne pratique.
Je crois que LINQ to SQL peut gérer cette situation, donc je suis un peu surpris que NHibernate ne peut pas (au mieux de mes capacités de recherche). Y a-t-il des cadres supplémentaires disponibles qui peuvent?
Voici les applications pertinentes pour cet exemple:
<class name="App.Core.Domain.Post, App.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Posts" xmlns="urn:nhibernate-mapping-2.2">
<id name="Id" type="Guid" column="PostId">
<generator class="assigned" />
</id>
...
<many-to-one cascade="save-update" access="field.pascalcase-underscore" name="Blog" column="BlogId" />
<many-to-one cascade="save-update" access="field.pascalcase-underscore" name="User" column="UserId" />
</class>
<class name="App.Core.Domain.Blog, App.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Blogs" xmlns="urn:nhibernate-mapping-2.2">
<id name="Id" type="Guid" column="BlogId">
<generator class="assigned" />
</id>
...
<bag name="Posts" cascade="all" inverse="true" access="field.pascalcase-underscore">
<key column="PostId" />
<one-to-many class="App.Core.Domain.Post, App.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
</class>
<class name="App.Core.Domain.User, App.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Users" xmlns="urn:nhibernate-mapping-2.2">
<id name="Id" type="Guid" column="UserId">
<generator class="assigned" />
</id>
...
<bag name="Posts" cascade="all" inverse="true" access="field.pascalcase-underscore">
<key column="PostId" />
<one-to-many class="App.Core.Domain.Post, App.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
</class>
Pourriez-vous coller vos fichiers de correspondance pour Blog et Message dans la réponse? – reach4thelasers