Я использую NDatabase для создания действительно простого хранилища объектов - в основном, для создания постоянной рабочей очереди. План состоит в том, чтобы создать набор объектов, перенести их на диск, а затем прочитать их обратно, отсортированные по одному из свойств. Я не могу получить «отсортированную» часть работы - NDatabase выдает исключение.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 has thrown an Exception Error:222:Operation not supported : CopyTo"
Однако, если я закомментировать строку q.Descend("Timestamp").OrderAscending();
то она отлично работает - хотя это явно не заказывали.
Может ли кто-нибудь помочь пролить свет на это, пожалуйста?
Какое исключение вызывает база данных ndatabase? –
@SivaGopal Я редактировал вопрос с сообщением об ошибке исключения. – TarkaDaal
извините, но odb.Query(); вернет IList , который не имеет метода Descend (string s) или что-то пропустил? Какая версия? –
InferOn