我正在尝试使用 persistence specification testing内置于 FNH 中。 CheckList
方法似乎是最近添加的,但较旧的 CheckEnumerable
已被弃用,因此我假设 CheckList
是稳定的。
我的测试代码看起来与此类似:
new PersistenceSpecification<Parent>(session)
.CheckProperty(x => x.Foo, 123)
.CheckList(x => x.Children,
new Child[] { new Child { Name = "Bob" } },
(p, c) =>
{
p.Children.Add(c);
c.Parent = p;
})
.VerifyTheMappings();
请注意,在映射中,Parent
拥有该关系(具有 Cascade.AllDeleteOrphan()
且不具有 逆
)。
当我运行它时,我收到可怕的“无法将 NULL 值插入...” SQL Server 错误消息,因为 NHibernate 没有将 ParentId
设置为Child
实体。与忘记在两端设置关联时发生的情况相同。
我检查了断点,lambda 内部的代码甚至没有执行,这显然就是关联设置不正确的原因。
映射本身是完全正确的;我可以编写普通代码来创建和插入实体就可以了。只是 CheckList
方法我无法使用。
我做错了什么?
最佳答案
我不知道为什么,但看来您确实需要使用 CheckComponentList
而不是 CheckList
。我不确定 CheckList
做了什么,或者它现在是否正常工作,但我查看了 SQL 跟踪,并且 CheckComponentList
正在生成正确的语句。
CheckComponentList
使用默认的相等比较器,除非明确指定,这对于不重写 Equals
的引用类型来说是引用相等,因此无论重写还是重写都至关重要子实体类中的 Equals
或使用采用 IEqualityComparer
参数的 CheckComponentList
重载之一。
关于c# - 我应该如何正确使用 Fluent NHibernate.Testing CheckList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657695/