2010-05-12 52 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的示例實現。