【问题标题】:Storing TimeSpan in db4o在 db4o 中存储 TimeSpan
【发布时间】:2010-11-02 08:08:22
【问题描述】:

我知道 TimeSpan 是不可变的。 我有一个包含 TimeSpan 字段的对象。该字段经常更新。每次我更新 db 中的对象时,db4o 都会更新 TimeSpan 字段。到目前为止,一切都很好。
但是旧的 TimeSpan 结构仍保留在数据库中,因此数据库不断增长。 如何防止 db4o 保存其他人?我只需要当前在该字段中保存的 TimeSpan。

class Test {
    TimeSpan _totalRuntime;
    void Work() {
        DateTime start = DateTime.Now;
        _totalRuntime = _totalRuntime.Add(DateTime.Now - start);
    }
}

// Open the db
IObjectContainer db = Db4oEmbedded.OpenFile(ConfigDb4O(), _db4OFilename);

public static IEmbeddedConfiguration ConfigDb4O() {
    IEmbeddedConfiguration config = Db4oEmbedded.NewConfiguration();
    config.Common.Diagnostic.AddListener(new DiagnosticToConsole());
    return config;
}

db4o 7.12.132.14217 (.NET20)

【问题讨论】:

    标签: c# db4o


    【解决方案1】:

    据报告here db4o 在更新使用“默认类型处理程序”的值类型时存在一些问题(您可以将类型处理程序视为负责将对象编组为 db4o 可以存储的内容的一段代码)。

    我们计划在找到时间后立即解决此问题。同时,我看到至少 2 种可能的解决方法:

    1. 存储 TimeSpan.Ticks(长整数)而不是时间跨度本身,或者
    2. 为 TimeSpan 编写自定义类型处理程序(更难,但并非不可能)。

    PS:您可以使用上面的链接关注此问题的进展。

    最好的

    阿德里亚诺

    【讨论】:

    • 感谢 Gamlor 修复问题链接 :)
    • DateTimes 和其他结构是否也受到影响?因为我的数据库越来越大。只保存刻度。
    猜你喜欢
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2012-10-04
    • 1970-01-01
    相关资源
    最近更新 更多