2010-02-19 3 views
0

Я использую ActiveRecord для хранения моих классов в базе данных.Создание полиморфного класса в Castle Project ActiveRecord

У меня есть иерархия классов, скажем, это мужчина и женщина, унаследованные от класса Human. В таблице базы данных человека содержится поле «Секс», которое равно 0 для мужчины и 1 для женщины. Я хотел бы иметь возможность загружать класс Human в отношении поля Sex, то есть если Sex равен 0, загрузка класса Human должна фактически создавать экземпляр класса Man (таким образом, считывая некоторые дополнительные поля из таблицы Man, кроме полей из Human Таблица).

Возможно ли это с помощью атрибутов CastleProject ActiveRecord? Если нет, можно ли переопределить некоторые переопределяемые методы?

ответ

1

Вы говорите о Single Table Inheritance

Половые колонки в вашей таблице будет служить в качестве дискриминатора используется NHibernate.

EDIT: Если у вас есть дополнительные поля для человека, вы можете либо положить их в один большой стол, либо разделить их, и использовать наследование класса (что означает JOIN всякий раз, когда вы выбираете объекты Men), так как он получает поля Human из таблицы «Человек» и «Человек» из таблицы «Человек».

+0

Спасибо, Небаканезер, ваш ответ очень полезен. Однако есть проблема, что я всегда получаю Человеческий класс вместо Человека или Женщины. Я не назначил DiscriminatorValue для этого класса, но сделал это для мужчин и женщин, однако это не помогает. Я использую класс FindAllByProperty класса Human и ожидаю, что он вернет мне список человеческих и человеческих случаев в соответствии с полем Sex. Что я сделал не так? – Alex

+0

Нашел решение самостоятельно - мои подклассы (мужчина/женщина) были внутренними, а человек был публичным. Это была причина постоянного поколения Человеческого экземпляра. – Alex

Смежные вопросы