|
|
|
NHibernate Proxy и дизайн классов
|
|||
|---|---|---|---|
|
#18+
Добрый день! Была тут проблема с приведением типов в NHibernate, которую мы, похоже, решили, однако хотелось бы узнать мнение более опытных NHibernate-товарищей... Итак, ситуация: Есть три обычных класса: Idcard - удостоверение личности Passport : Idcard - паспорт РФ, наслед. от удостоверения личности Person - человек, у которого задано свойство Idcard С помощью простого запроса (без добавления fetch) через Гибернэйт я получаю объект класса Person. Объект успешно получен. При этом его свойство Idcard имеет тип IdcardProxy0123..789. Пока все нормально, однако при операции вида: var passport = (Passport)person.Idcard я получаю исключение "Invalid cast exception". (Здесь подразумевается, что у человека удостоверение личности точно паспорт). На данный момент эту проблему мы решаем с помощью дополнительной операции "распроксирования": Код: plaintext 1. Прокси предварительно инициализируется, так как это необходимо для срабатывания метода Unproxy(). Думаю, такая проблема не только у нас одних. Интересно было бы узнать кто как решает? И какие минусы у нашего варианта? Вот по этой ссылке описана схожая ситуация, причем человек там говорит, что проблема в дизайне модели данных. Мне не понятно, почему эта модель данных считается неудачной? http://groups.google.com/group/nhibernate-development/browse_thread/thread/5a672527056be814?pli=1 Спасибо за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 14:28 |
|
||
|
NHibernate Proxy и дизайн классов
|
|||
|---|---|---|---|
|
#18+
barser, У вас похоже в маппинге, не стыковка, Имхо весь прокси можно реализовать в нутрях класса персоны, а не с наружи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2010, 17:08 |
|
||
|
NHibernate Proxy и дизайн классов
|
|||
|---|---|---|---|
|
#18+
Где-то в степи, А не могли бы Вы привести небольшой поясняющий пример, как прокси реализовать внутри класса, а то что-то непонятно... Маппинг у нас такой же как в Sharp Architecture, используется автомэппер из Fluent NHibernate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2010, 17:15 |
|
||
|
NHibernate Proxy и дизайн классов
|
|||
|---|---|---|---|
|
#18+
barser, типовая реализация вашей проблемы Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 15:35 |
|
||
|
NHibernate Proxy и дизайн классов
|
|||
|---|---|---|---|
|
#18+
Где-то в степи, большое спасибо, но если мы создаем в классе Person метод getPassport, обращающийся к БД за пасспортом, то Person - будет уже не POCO-класс.... У нас сейчас в проекте есть разделение между POCO классами предметной области и служебными классами DAO - 2 разных проекта. В любом случае, послезавтра на работе опробую такой вариант. Посмотрю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 22:00 |
|
||
|
NHibernate Proxy и дизайн классов
|
|||
|---|---|---|---|
|
#18+
barser, Ну в базу он навряд ли полезет сразу, поищет в начале в кеше. ну спрячьте его в в бизнес логику, или интерфейс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2010, 20:59 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=36481448&tid=1351450]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 366ms |

| 0 / 0 |
