c# - 我应该如何正确使用 Fluent NHibernate.Testing CheckList?

标签 c# .net unit-testing nhibernate fluent-nhibernate

我正在尝试使用 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/

相关文章:

c# - 如何将类序列化到数据库而不是文件系统 C#

c# - 在 C# 中使用数字设置颜色

.net - 在客户端使用 SSL 和自托管 WebAPI

.net - 在F#中使用自定义Marshaller

java - 使用参数排列进行测试的工具

c# - 从 HttpResponseMessage 获取内容以使用 c# 动态关键字进行测试

java - 在单元测试中比较对象的正确方法

c# - Botframework Web 应用程序 Azure IDX20803 : Unable to obtain configuration from: '[PII is hidden]

c# - 从 JSON 响应打印特定值

c# - WPF 组合框绑定(bind)