AsProjection () выбрасывает исключение для асинхронного запроса - PullRequest
0 голосов
/ 31 марта 2012

В простом тестовом сценарии, который можно настроить с помощью следующего:

public class TestObj
{
    public string Id { get; set; }
    public string Name { get; set; }
}

public class Summary
{
    public string MyId { get; set; }
    public string MyName { get; set; }
}

public class TestObjs_Summary : AbstractIndexCreationTask<TestObj, Summary>
{
    public TestObjs_Summary()
    {
        Map = docs => docs.Select(d => new { MyId = d.Id, MyName = d.Name });

        Store(x => x.MyId, FieldStorage.Yes);
        Store(x => x.MyName, FieldStorage.Yes);
    }
}

static IDocumentStore Setup()
{
    var store = new DocumentStore() { Url="http://localhost:8080" };
    store.Initialize();
    IndexCreation.CreateIndexes(MethodInfo.GetCurrentMethod().DeclaringType.Assembly, store);

    using (var session = store.OpenSession())
    {
        session.Store(new TestObj { Name = "Doc1" });
        session.Store(new TestObj { Name = "Doc2" });
        session.SaveChanges();
    }
    return store;
}

Я могу выполнить простой синхронный запрос к индексу и получить ожидаемые результаты (вывод 2 строк типа Summary):

using (var session = store.OpenSession())
{
    var q = session.Query<Summary>("TestObjs/Summary").AsProjection<Summary>();
    Dump("Sync:", q.ToList());
}

Однако, если я попробую то же самое с помощью асинхронного запроса:

using (var session = store.OpenAsyncSession())
{
    var q = session.Query<Summary>("TestObjs/Summary").AsProjection<Summary>();
    q.ToListAsync().ContinueWith(t => Dump("Async:", t.Result));
}

Я получаю исключение InvalidCastException:

InnerException: System.InvalidCastException
Message=Unable to cast object of type 'TestObj' to type 'Summary'.
Source=Raven.Client.Lightweight
StackTrace:
at Raven.Client.Document.InMemoryDocumentSessionOperations.ConvertToEntity[T](String id, RavenJObject documentFound, RavenJObject metadata) in c:\Builds\RavenDB-Unstable\Raven.Client.Lightweight\Document\InMemoryDocumentSessionOperations.cs:line 416
at Raven.Client.Document.InMemoryDocumentSessionOperations.TrackEntity[T](String key, RavenJObject document, RavenJObject metadata) in c:\Builds\RavenDB-Unstable\Raven.Client.Lightweight\Document\InMemoryDocumentSessionOperations.cs:line 340
at Raven.Client.Document.SessionOperations.QueryOperation.Deserialize[T](RavenJObject result) in c:\Builds\RavenDB-Unstable\Raven.Client.Lightweight\Document\SessionOperations\QueryOperation.cs:line 130

...

Я подозреваю, что это ошибка, но, как новичок в RavenDB, я сначала хотел исключить возможность того, что я что-то здесь напортачил. Кто-нибудь может понять, почему этот код не работает?

(Примечание: это было выполнено в Build 721 и 701, и оба дают одинаковые результаты)

Спасибо за любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 31 марта 2012

Похоже, ошибка. Я не вижу ничего плохого в вашем коде. Я предлагаю вам создать проблему здесь: http://issues.hibernatingrhinos.com

...