Unit testing Fluent NHibernate-单元测试一对多*逆*映射

Unit testing Fluent NHibernate-单元测试一对多*逆*映射,unit-testing,fluent-nhibernate,nhibernate-mapping,orm,Unit Testing,Fluent Nhibernate,Nhibernate Mapping,Orm,我不知道如何(或者是否可能)使用Fluent NHibernatePersistenceSpecification.CheckList(…)方法来检查一对多映射 以下是我想做的: 在一个香草博客/帖子示例中使用fluentnhibernate,我定义了一对多博客帖子映射。 我想要的一个限制是,一篇文章必须始终指向它所对应的博客,从它被添加到数据库的那一刻起。(基本上,Posts表中的BlogID列不为NULL) 因此,我定义了如下映射: public class BlogMap: ClassMa

我不知道如何(或者是否可能)使用Fluent NHibernate
PersistenceSpecification.CheckList(…)
方法来检查一对多映射

以下是我想做的:

在一个香草博客/帖子示例中使用fluentnhibernate,我定义了一对多博客帖子映射。 我想要的一个限制是,一篇文章必须始终指向它所对应的博客,从它被添加到数据库的那一刻起。(基本上,Posts表中的BlogID列不为NULL)

因此,我定义了如下映射:

public class BlogMap: ClassMap<Blog>
{
    public BlogMap(){
        [...]
        HasMany(x => x.Posts)
            .Inverse()
            .Cascade.All();
}
公共类BlogMap:ClassMap
{
公共博客地图(){
[...]
HasMany(x=>x.Posts)
.Inverse()
.Cascade.All();
}
Blog类有一个
AddPosts(IList 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();
新的PersistenceSpecification(GetSession(),eq)
.检查表(c=>c.职位,
新建[]{new Post{Name=“Post 1”},新建Post{Name=“Post 2”})
.验证应用程序();
在映射单元测试中,我得到以下异常:

“System.ApplicationException:实际计数不等于预期计数”

…这是意料之中的,因为帖子的BlogID值没有设置在任何地方。 我想知道我是否能够以某种方式访问由
PersistenceSpecification
在幕后创建的
Blog
实例,以便在执行检查之前手动调用AddBlogs(…)方法

如果我从映射中删除
.Inverse()
(并删除BlogID列的database NOT NULL约束),测试将通过


有什么想法吗?

我知道这已经在邮件列表中列出了,但我们也可以把答案放在堆栈溢出上

PersistenceSpecification类有一个检查表方法。下面是一个示例用法:

_spec.CheckList(x => x.EnumerableOfKittens, kittens, (cat, kitten) => cat.AddKitten(kitten));

此方法是最近才添加的。如果找不到,请获取最新的FNH trunk。

谢谢您的提示!Offtopic:我很喜欢!如果我在其他地方问过这个问题,我最多可能会得到一个RTFM(来自邮件列表:)我没有见过其他与ORM相关的项目(好的,只有一个-亚音速)只在SO上与他们的用户交谈,我认为这是SO的一个很好(尽管出乎意料)的新用法。