db4o获取容器的历史记录

时间:2011-06-27 06:13:30

标签: db4o

        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容器历史的任何方法?

  

使用值“Test”Foo创建Foo

     

Foo的属性“Test”更改为“NewName”

1 个答案:

答案 0 :(得分:0)

您可以通过实施event-handlers来实现。基本上,您可以为创建和更新事件注册事件处理程序。像这样:

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
    };

当然,比较和打印是你必须要做的工作。没有内置的东西。