我無法弄清楚如何(或者如果它是在所有可能)使用功能NHibernate PersistenceSpecification<T>.CheckList(...)
方法來檢查逆一個一對多映射。功能NHibernate - 單元測試一個一對多*逆*映射
這裏就是我想要做的事:
在香草博客/後例子使用功能NHibernate,我已經定義了一個一對多的博客< - >帖子映射。 我想要的一個限制是,一個帖子必須始終指向它所對應的博客,從它被添加到數據庫的那一刻開始。 (基本上,在文章表中的BlogID列是NOT NULL)
爲此,我定義像這樣的映射:
public class BlogMap: ClassMap<Blog>
{
public BlogMap(){
[...]
HasMany(x => x.Posts)
.Inverse()
.Cascade.All();
}
的博客類有一個AddPosts(IList<Post> posts)
方法,該方法採用的兩側的護理該映射,所以當Post實例在數據庫中被插入時,其BlogID列已經填充了相應的Blog ID。
到目前爲止,這麼好。
的問題是,在一個映射單元測試使用
new PersistenceSpecification<Blog>(GetSession(), eq)
.CheckList(c => c.Posts,
new [] {new Post{Name = "Post 1"}, new Post{Name = "Post 2"}})
.VerifyTheMappings();
的時候,我得到這個異常:
「System.ApplicationException:實際計數不等於預期計數」
...這是預料之中的,因爲帖子的BlogID值沒有設置在任何地方。 我想知道如果我能以某種方式訪問PersistenceSpecification
在幕後創建的Blog
實例,所以我可以在執行檢查之前手動調用AddBlogs(...)方法。
如果我從映射中刪除.Inverse()
(並且刪除BlogID列的數據庫NOT NULL約束),測試通過。
任何想法?
感謝您的提示! Offtopic:我喜歡SO!如果我在別處問過這個問題,我可能已經得到了最好的RTFM(郵件列表中的M :) 我看過其他ORM相關的項目(好吧,只有一個--SubSonic)只會在SO ,並且我認爲這對於SO來說是一個很好的(雖然意想不到的)新用法。 – 2009-12-05 08:44:22