NHibernate и создание абстрактного объекта базового класса - PullRequest
0 голосов
/ 03 февраля 2011

Я видел в некоторых примерах NHibernate, что используется абстрактный базовый класс сущностей, который переопределяет Equals, GetHashCode, для обработки переходных сущностей, прокси-объектов (в сценарии с отложенной загрузкой ... я думаю).

Действительно ли необходимо реализовать такой абстрактный базовый класс сущностей для получения всех моих сущностей?

Ответы [ 4 ]

2 голосов
/ 03 февраля 2011

Да, сам базовый класс не требуется, но вы должны захотеть переопределить Equals и GetHashcode для всех ваших сущностей, поэтому базовый класс делает это намного менее повторяющимся

2 голосов
/ 04 февраля 2011

По моему опыту, наличие базового класса, предоставляющего свойство Id, действительно полезно для возможности создания универсальных методов репозитория, использующих это преимущество, или для соглашений автоматического сопоставления.это еще одна история.

Это заставляет загружать неинициализированные прокси при сравнении их (например, вызывая Distinct для последовательности).По этой причине лучше делать это только для иерархий классов редко меняющихся сущностей, которые, вероятно, будут кэшироваться.

2 голосов
/ 03 февраля 2011

Не обязательно вообще. Это просто делает вещи проще, потому что вы можете поместить такие вещи, как Id. А также обычные функции, такие как Equals / GetHashCode, о которых вы упоминали ранее.

1 голос
/ 12 февраля 2011

Переопределение Equals обязательно требуется, если вы хотите выполнять отложенную загрузку. Это связано с тем, что NHibernate использует метод Equals для определения равенства. По умолчанию используется равенство ссылок.

Когда NHibernate реализует отложенную загрузку, он использует прокси-объекты, которые являются подклассами класса реальной сущности, причем каждый член переопределяется для включения отложенной загрузки.

Следовательно, чтобы ваше приложение распознало, что прокси-объект - это то же самое, что и объект, для которого он предназначен, - он вообще не должен знать о прокси-объекте.

Таким образом, вы должны переопределить оператор Equals для интеллектуального распознавания равенства (после проверки ссылочного равенства ... и т. Д.), Что объекты равны, если их идентификаторы равны.

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