1

私は NDatabase を使用して、いくつかの非常に単純なオブジェクト ストレージを実行しています。基本的には永続的な作業キューを構築しています。計画は、一連のオブジェクトを作成し、それらをディスクに永続化し、プロパティの 1 つで並べ替えて読み戻すことです。「ソートされた」部分が機能しません - NDatabase は例外をスローします。

保持したいオブジェクトのスーパータイプは次のとおりです。

public abstract class Instruction: IComparable, IComparable<Instruction>
{
    public virtual DateTime Timestamp
    {
        get;
        set;
    }

    public int CompareTo(Instruction other)
    {
        if (this.Timestamp.Equals(other.Timestamp))
            return 0;

        return (this.Timestamp < other.Timestamp) ? -1 : 1;
    }

    public int CompareTo(object obj)
    {
        var other = obj as Instruction;
        return other == null ? -1 : this.CompareTo(other);
    }
}

オブジェクトストアを作成する方法は次のとおりです。

using (var odb = OdbFactory.Open(storeName))
{
    odb.IndexManagerFor<Instruction>().AddIndexOn("TimestampIndex", "Timestamp");
    foreach (var instruction in instructions)
    {
        odb.Store(instruction);
    }
    odb.IndexManagerFor<Instruction>().RebuildIndex("TimestampIndex");
}

そして、ストアが後で取得される方法は次のとおりです。

lock (this.odb)
{
    var q = odb.Query<T>();
    q.Descend("Timestamp").OrderAscending();
    var objectSet = q.Execute<T>(true, 0, maxCount);
    instructions = objectSet.ToList();

    foreach (var instruction in instructions)
    {
        odb.Delete(instruction);
    }

    odb.IndexManagerFor<Instruction>().RebuildIndex("TimestampIndex");

    odb.Commit();
}

NDatabase.Exceptions.OdbRuntimeExceptionこれにより、通話がスローされToList()ます。例外プロパティを掘り下げると、メッセージが表示されます

「NDatabase は例外エラーをスローしました:222:操作はサポートされていません:CopyTo」

ただし、行をコメントアウトすると、q.Descend("Timestamp").OrderAscending();正常に機能しますが、明らかに順序付けられていません。

誰でもこれに光を当てるのを手伝ってもらえますか?

4

1 に答える 1