powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate Proxy и дизайн классов
7 сообщений из 7, страница 1 из 1
NHibernate Proxy и дизайн классов
    #36477690
barser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Была тут проблема с приведением типов в NHibernate, которую мы, похоже, решили, однако хотелось бы узнать мнение более опытных NHibernate-товарищей... Итак, ситуация:

Есть три обычных класса:
Idcard - удостоверение личности
Passport : Idcard - паспорт РФ, наслед. от удостоверения личности
Person - человек, у которого задано свойство Idcard

С помощью простого запроса (без добавления fetch) через Гибернэйт я получаю объект класса Person.
Объект успешно получен. При этом его свойство Idcard имеет тип IdcardProxy0123..789.
Пока все нормально, однако при операции вида:

var passport = (Passport)person.Idcard

я получаю исключение "Invalid cast exception". (Здесь подразумевается, что у человека удостоверение личности точно паспорт).

На данный момент эту проблему мы решаем с помощью дополнительной операции "распроксирования":

Код: plaintext
1.
            NHibernateUtil.Initialize(person.Idcard);
            var passport = session.GetSessionImplementation().PersistenceContext.Unproxy(person.Idcard);

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

Думаю, такая проблема не только у нас одних. Интересно было бы узнать кто как решает? И какие минусы у нашего варианта?

Вот по этой ссылке описана схожая ситуация, причем человек там говорит, что проблема в дизайне модели данных. Мне не понятно, почему эта модель данных считается неудачной?

http://groups.google.com/group/nhibernate-development/browse_thread/thread/5a672527056be814?pli=1

Спасибо за ответы!
...
Рейтинг: 0 / 0
NHibernate Proxy и дизайн классов
    #36481448
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barser,

У вас похоже в маппинге, не стыковка,
Имхо весь прокси можно реализовать в нутрях класса персоны, а не с наружи
...
Рейтинг: 0 / 0
NHibernate Proxy и дизайн классов
    #36481457
barser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

А не могли бы Вы привести небольшой поясняющий пример, как прокси реализовать внутри класса, а то что-то непонятно...
Маппинг у нас такой же как в Sharp Architecture, используется автомэппер из Fluent NHibernate.
...
Рейтинг: 0 / 0
NHibernate Proxy и дизайн классов
    #36483075
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barser,

типовая реализация вашей проблемы
Код: plaintext
1.
2.
3.
4.
5.
6.
    class Person
    {
        public abstract Passport GetPassport
        {
            get { return что там у нас; }
        }
    }
...
Рейтинг: 0 / 0
NHibernate Proxy и дизайн классов
    #36483704
barser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, большое спасибо, но если мы создаем в классе Person метод getPassport, обращающийся к БД за пасспортом, то Person - будет уже не POCO-класс.... У нас сейчас в проекте есть разделение между POCO классами предметной области и служебными классами DAO - 2 разных проекта.

В любом случае, послезавтра на работе опробую такой вариант. Посмотрю...
...
Рейтинг: 0 / 0
NHibernate Proxy и дизайн классов
    #36484853
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barser,

Ну в базу он навряд ли полезет сразу, поищет в начале в кеше.
ну спрячьте его в в бизнес логику, или интерфейс
...
Рейтинг: 0 / 0
NHibernate Proxy и дизайн классов
    #36484863
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barser,

посвьте virtual (будет ругаться)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate Proxy и дизайн классов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]