Проблема с использованием VerifyTheMappings в Fluent NHibernate - PullRequest
1 голос
/ 13 мая 2010

Я использую 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», но получено «ClassBProxyf24bc4 ...» типа «MyNamespace.ClassB»

Я также попытался использовать «CheckReference» вместо «CheckProperty», но я получил те же результаты. Создание экземпляра ClassB, встроенного в CheckProperty (), также не имело значения - не то, чтобы я ожидал, что это ...

Я встречал в Интернете примеры кода, которые подразумевают, что это должно работать. Что мне здесь не хватает?

1 Ответ

1 голос
/ 13 мая 2010

Если ClassB является сопоставленной сущностью, вы должны использовать CheckReference, а не CheckProperty.

Однако проблема в том, что вы должны помочь Fluent NHibernate решить, равны ли объекты. Вы можете либо передать IEqualityComparer в PersistenceSpecification, либо сделать так, чтобы ваши сущности переопределяли метод Equals .

В переопределении сравнения / равно вы, вероятно, захотите сделать что-то вроде сравнения типов и значений первичного ключа.

В вики Fluent NHibernate есть раздел об использовании PersistenceSpecification для тестирования ссылок, который включает пример реализации IEqualityComparer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...