gpt4 book ai didi

unit-testing - Fluent NHibernate - 对一对多 * 逆 * 映射进行单元测试

转载 作者:行者123 更新时间:2023-12-04 04:14:10 24 4
gpt4 key购买 nike

我不知道如何(或者是否可能)使用 Fluent NHibernate PersistenceSpecification<T>.CheckList(...)检查 的方法反 一对多映射。

这是我想要做的:

在一个普通的博客/帖子示例中使用 fluent nhibernate,我定义了一个一对多的博客<->帖子映射。
我想要的一个限制是帖子必须始终指向它对应的博客,从它被添加到数据库的那一刻起。 (基本上,Posts 表中的 BlogID 列不是 NULL)

出于这个原因,我定义了这样的映射:

public class BlogMap: ClassMap<Blog>
{
public BlogMap(){
[...]
HasMany(x => x.Posts)
.Inverse()
.Cascade.All();
}

Blog 类有一个 AddPosts(IList<Post> posts)方法负责映射的双方,因此当 Post 实例在数据库中插入时,它们的 BlogID 列已经填充了相应的博客 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 值没有在任何地方设置。
我想知道我是否能以某种方式访问​​ BlogPersistenceSpecification 在幕后创建的实例,因此我可以在进行检查之前手动调用 AddBlogs(...) 方法。

如果我删除 .Inverse()从映射(并删除 BlogID 列的数据库 NOT NULL 约束),测试通过。

有任何想法吗?

最佳答案

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

PersistenceSpecification 类有一个 CheckList 方法。这是一个示例用法:

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

这个方法是最近才添加的。如果找不到,请获取最新的 FNH 行李箱。

关于unit-testing - Fluent NHibernate - 对一对多 * 逆 * 映射进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1822572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com