使用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之外,彼此之間沒有任何關係。要了解這是一個façade。)
在這個例子中,我只使用一個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>
您可以將博客和博客的映射文件粘貼到答案中嗎? – reach4thelasers 2009-11-12 00:53:57