Используя NHibernate, я ищу способ автоматического обновления сохраненных коллекций при удалении сохраненного элемента. Например:NHibernate: удалять элемент из сохраненной коллекции автоматически
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
Я понимаю, что могут быть проблемы с моделью и/или отображения в этом примере, но эти вопросы в сторону, я хочу, чтобы найти способ, чтобы получить коллекцию User.Posts автоматически обновляться , т.е. удалить «сообщение» от себя. (Может быть, это не самый лучший пример в мире, но предположим, что существует много блогов и многих Пользователей, не связанных друг с другом, кроме как через Posts. Понимают, что это фасад.)
В этом примере я использую только один Сессия NHibernate. Я готов настроить это, но я ищу схему, и она должна быть прозрачной для модели. События NHibernate также находятся на столе, если можно показать, что это хорошая практика.
Я считаю, что LINQ to SQL может справиться с этой ситуацией, поэтому я немного удивлен, что NHibernate не может (в лучшем случае из моих поисковых способностей). Существуют ли какие-либо дополнительные рамки, которые могут?
Вот соответствующие отображения для этого примера:
<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>
Не могли бы вы вставить свои файлы сопоставления для Blog и Post в ответ? – reach4thelasers