Почему NHibernate не может использовать Identity в таблице подклассов объединения для отображения конкретного класса? - PullRequest
4 голосов
/ 02 февраля 2012

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

Ответы [ 2 ]

4 голосов
/ 02 февраля 2012

Все просто.POID должен быть уникальным для всех экземпляров корневого типа сущности.

Рассмотрим следующий пример:

abstract class Vehicle { ... }
class Car : Vehicle { ... }
class Truck : Vehicle { ... }

Если вы должны получить транспортное средство , конкретный тип которого у вас нетне знаю :

var carOrTruck = session.Get<Vehicle>(vehicleId);

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

Поэтому для таблицы на каждый конкретный класс (довольно плохая стратегия, если вы спросите меня), NHibernate нужен генератор, который гарантирует уникальность среди подклассов.

1 голос
/ 02 февраля 2012

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

Подводя итог комментариям ниже: как в примере, который есть у Ayende, если вы запрашиваете все корневые типы (например, "Выберите сторону"), вы можетеполучить дубликаты для удостоверения личности.Этот факт вместе с характеристикой UNION (возвращает только отдельные записи) может дать неожиданные результаты (пропущенные записи).Вот почему вы не можете использовать идентичность, а только hilo, что позволяет nhibernate избегать дублирования.

...