在Fluent NHibernate中使用VerifyTheMappings的问题

时间:2010-05-12 23:22:29

标签: fluent-nhibernate

我正在使用Fluent NHibernate将类映射到数据库,我正在使用PersistenceSpecification.VerifyTheMappings()来验证单元测试中的映射。

如果ClassA具有ClassB类型的属性并且我想验证映射,我首先创建一个ClassB实例然后我尝试将它与PersistenceSpecification一起使用,如下所示:

ClassB classB = new ClassB();
new PersistenceSpecification<ClassA>(session)
    .CheckProperty(x => x.ClassB, classB)
    .VerifyTheMappings(); 

当我在NUnit中运行测试时,测试失败并出现以下错误:

System.ApplicationException:对于属性'ClassB',期望'MyNamespace.ClassB'的类型为'MyNamespace.ClassB',但是得到'ClassName的类型为'MyNamespace.ClassB'的'ClassBProxyf24bc4 ...'

我也尝试使用“CheckReference”而不是“CheckProperty”,但我得到了相同的结果。在CheckProperty()中内联创建ClassB实例也没有什么区别 - 不是我预期的......

我在网上遇到的代码示例暗示这应该有用。我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

如果ClassB是映射实体,则应使用CheckReference而不是CheckProperty。

然而,问题是你必须帮助Fluent NHibernate决定对象是否相等。您可以将 IEqualityComparer 传入PersistenceSpecification,也可以让您的实体覆盖 Equals 方法。

在比较器/等于覆盖中,您可能希望执行类似比较类型和主键值的操作。

有一个section at the Fluent NHibernate wiki关于使用PersistenceSpecification来测试引用,其中包括IEqualityComparer的示例实现。