Unit testing Fluent NHibernate-单元测试一对多*逆*映射
我不知道如何(或者是否可能)使用Fluent NHibernateUnit 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
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的一个很好(尽管出乎意料)的新用法。