2010-05-12 63 views
1

我使用Fluent NHibernate将类映射到数据库,我使用PersistenceSpecification.VerifyTheMappings()来验证单元测试中的映射。问题在流利NHibernate中使用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”,但得到类型为“ClassBProxyf24bc4 ......”“myNameSpace对象。 ClassB'

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

我遇到过在网络上的代码示例,这意味着这应该工作。我在这里错过了什么?

回答

1

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

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

在comparer/equals覆盖中,您可能会想要比较类型和主键值。

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