NHibernate создание пользовательских объектов SQL - PullRequest
3 голосов
/ 19 октября 2008

Несколько упрощенный пример ситуации: у меня есть объекты A и B, которые являются невероятно «тяжелыми» объектами домена. Загрузка одного из базы данных довольно сложная задача. Затем у меня есть объект C, который представляет собой очень простой объект со строкой метки, один A и один B - оба ленивые.

Я делаю некоторые низкоуровневые запросы для создания огромных списков C, поэтому я точно знаю, какие идентификаторы мне нужно сохранить для CA и CB, но я не хочу загрузить все объекты и установите их в свойствах, потому что накладные расходы безумны.

Вместо этого я хочу просто вставить идентификаторы непосредственно в мои объекты C, а затем позволить свойствам A и B полностью загружаться позже только при необходимости.

Я вижу тег <sql-insert/> в документации, но раздел действительно разрежен.

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

Ответы [ 2 ]

1 голос
/ 20 октября 2008

Дэн - не уверен, что это будет работать без тестирования, но его стоит попробовать. Я думаю, у вас уже есть идентификаторы, которые вы хотите добавить в свой C - поэтому установите ваши ассоциации (я полагаю, многие-к-одному), чтобы вставить = "false" и update = "false" (возможно, cascade = "none"). "будет работать альтернативно, а также). Затем создайте «пустую копию» ваших сущностей A и B, добавьте к ним идентификаторы, добавьте их в C и попытайтесь сохранить C (Session.SaveOrUpdateCopy (C)). Надеемся, что NHibernate не будет пытаться добавить новые объекты A и B в их соответствующие таблицы, а просто установит правильные идентификаторы в таблице C - таким образом вам не нужно загружать объекты A и B.

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

1 голос
/ 20 октября 2008

Я не знаю, позволяет ли это NHibernate (отдельные объекты на одних и тех же базовых данных), но обычно я делаю «дайджест» объектов, которые можно преобразовать в полноценные объекты (даже с ленивой загрузкой полноценных объектов) , Я обычно делаю это со слоями code-gen'd или ORM.

Большие коллекции обычно представляют собой дайджесты, и затем, если необходимые свойства или методы не раскрываются дайджестом, они преобразуются в целые объекты для вызова или для передачи и т. Д.

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