db4o получает историю контейнера - PullRequest
0 голосов
/ 27 июня 2011
        var config = Db4oEmbedded.NewConfiguration ();
        using (var container = Db4oEmbedded.OpenFile (config, FILE))
        {
            var foo = new Foo ("Test");
            container.Store (foo);

            foo.Name = "NewName";
            container.Store (foo);
        }

Любой способ разрешить историю контейнера для foo в формате ниже?

Foo создан со значениями "Test" Foo

Свойство Foo "Test" изменено на "NewName"

1 Ответ

0 голосов
/ 27 июня 2011

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

IEventRegistry events = EventRegistryFactory.ForObjectContainer(container);
events.Creating +=delegate(object sender, CancellableObjectEventArgs args)
    {
        Console.WriteLine("{0} created: Value {1}",args.Object.GetType(),args.Object);
    };

Для просмотра изменений значений вам может понадобиться просмотреть старое состояние в обработчике событий.Вы можете сделать это следующим образом:

IEventRegistry events = EventRegistryFactory.ForObjectContainer(container);
events.Creating +=delegate(object sender, CancellableObjectEventArgs args)
    {
        IObjectContainer eventContainer = args.ObjectContainer();
        object oldVersion = eventContainer.Ext().Peek(args.Object,1,false);
        object currentVersion = args.Object;

        // Do comparison and print stuff
    };

Конечно, сравнение и печать - это работа, которую вы должны сделать.Для этого нет ничего встроенного.

...