Активация: Как вы сказали, db4o использует механизм активации для управления тем, какие объекты загружаются.Чтобы предотвратить загрузку многих объектов, существуют разные стратегии.
- Уменьшите глобальную глубину активации по умолчанию :
configuration.Common.ActivationDepth = 2
Затем используйте приведенные ниже стратегии для активации нужных объектов. - Используйте конфигурацию активации для конкретного класса, например каскадная активация , минимум и maximun глубина активации и т. Д.
- Активация объектовявно по запросу:
container.Activate(theObject,5)
Однако все эти вещи довольно болезненны для сложных графов объектов.Единственная стратегия избавления от этой боли - прозрачная активация .Создайте такой атрибут, как TransparentlyActivation.Используйте этот атрибут, чтобы отметить ваши сохраненные классы.Затем используйте db4otool для улучшения ваших классов.Добавьте команду db4otool к событиям после сборки в Visual Studio: как 'PathTo\Db4oTool.exe -ta -debug -by-attribute:YourNamespace.TransparentlyActivated $(TargetPath)
Guid, общие коллекции: нет (в версии 7.12 или 8.0).Однако, если вы храните свои собственные структуры: они плохо обрабатываются db4o
WebApplication: я рекомендую встроенный контейнер, а затем контейнер сессии для каждого запроса .
Обновление для расширенной части вопроса
Для вашего случая.Для такой сложной схемы активации я бы использовал прозрачную активацию.Я предполагаю, что вы используете свойства, а не открытые поля в вашем реальном сценарии, иначе прозрачное постоянство не работает.
Прозрачная активация в основном загружает объект в тот момент, когда метод / свойство вызывается первым.Поэтому, когда вы обращаетесь к свойству AR, тогда оно само загружается, но не ссылающиеся объекты.Я просто пролистываю несколько шаблонов доступа, чтобы показать, что я имею в виду:
Получение 'A.BList.C.BList.A.R'
- A загружается, когда выдоступ к A.BList.Массив BList заполнен неактивированными объектами
- Вы продолжаете переходить к BList.C.В этот момент загружается объект BList
- Затем вы получаете доступ к C.BList.db4o загружает C-объект
- И так далее, и так далее.
Так что, когда вы получаете 'A.BList.C.BList.AR', тогда 'AR' незагружен
Выгруженный объект представлен «пустым» объектом оболочки, для которого все значения установлены на ноль или значение по умолчанию.Массивы всегда полностью загружаются, но сначала заполняются неактивированными объектами.
Обратите внимание, что нет реального синтаксиса запросов для выполнения каких-либо сложных запросов на загрузку.Вы загружаете свой стартовый объект, а затем вытягиваете содержимое по мере необходимости.
Я также должен отметить, что этот вид доступа будет работать ужасно по сети с db4o.
Еще один намек.Если вы хотите проделать сложную работу над графовой структурой, вам также следует взглянуть на графические базы данных, например Neo4J или Sones Graph DB