3

私はこのようなインデックスを持っています

public class FeedAnnouncementByOneLabel : Raven.Client.Indexes.AbstractIndexCreationTask<FeedPost, FeedAnnouncementByOneLabel.Result>
{
    public class Result
    {
        public long SequentialId { get; set; }
        public string AnnouncementId { get; set; }
        public string Label1 { get; set; }
        public string FeedOwner { get; set; }
        public DateTimeOffset CreationDate { get; set; }
    }
    public FeedAnnouncementByOneLabel()
    {
        Map = announcements => from doc in announcements
                               from docLabelsItem1 in ((IEnumerable<Label>)doc.Labels).DefaultIfEmpty()
                               select new Result
                               {
                                   SequentialId = doc.SequentialId,
                                   AnnouncementId = doc.AnnouncementId,
                                   CreationDate = doc.CreationDate,
                                   FeedOwner = doc.FeedOwner,
                                   Label1 = docLabelsItem1.Text
                               };
    }
}

そして、私は次のようにクエリを実行します(簡略化されたバージョンで、まだ失敗します):

from c in _session.Query<FeedAnnouncementByOneLabel.Result, FeedAnnouncementByOneLabel>()
                                   select c;

クエリを実行するたびに例外が発生します。本当に奇妙なことは、これが以前は機能していたことです。Raven を最新バージョンに更新してから壊れたのか、それとも私が変更した何かが原因で壊れたのかはわかりません。唯一の変更点は、「FeedPost」を独自の DLL (さまざまな DataContract 属性を含む) に移動したことだと確信しています。

テイカーはいますか??

ありがとう

<Exception xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ExceptionType>System.InvalidCastException</ExceptionType>
<Message>
Unable to cast object of type 'FeedPost' to type 'Result'.
</Message>
<StackTrace>
at Raven.Client.Document.InMemoryDocumentSessionOperations.ConvertToEntity[T](String id, RavenJObject documentFound, RavenJObject metadata) in c:\Builds\RavenDB-Stable\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-Stable\Raven.Client.Lightweight\Document\InMemoryDocumentSessionOperations.cs:line 340
 at Raven.Client.Document.SessionOperations.QueryOperation.Deserialize[T](RavenJObject result) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\SessionOperations\QueryOperation.cs:line 130
 at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
 at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
 at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
 at Raven.Client.Document.SessionOperations.QueryOperation.Complete[T]() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\SessionOperations\QueryOperation.cs:line 114
 at Raven.Client.Document.AbstractDocumentQuery`2.GetEnumerator() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\AbstractDocumentQuery.cs:line 603
 at Raven.Client.Linq.RavenQueryInspector`1.GetEnumerator() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryInspector.cs:line 98
 at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
 at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
 at FeedPostsController.Get(String labels, Int32 sincePostId) in FeedPostsController.cs:line 211
 at lambda_method(Closure , Object , Object[] )
 at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
 at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.Execute(HttpControllerContext controllerContext, IDictionary`2 arguments)
 at System.Web.Http.Controllers.ApiControllerActionInvoker.<>c__DisplayClass2.<InvokeActionAsync>b__0()
 at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)
</StackTrace>
</Exception>

[アップデート]

OK - FeedPost 定義を、インデックスを持つ同じ DLL に戻しました... それでも失敗します。

4

1 に答える 1

1

これを試してみましたが(https://gist.github.com/2780374)、エラーが発生しません(つまり、クエリがエラーなしで実行されます)。結果はありません。

ラベルですべてのフィード通知を取得しようとしているようですが、これでうまくいく可能性がありますか?annoucementIdと他のIDは、(ラベルによる)集計の邪魔になるため削除しましたが、ドメインが間違っている可能性があります。

    public class FeedAnnouncementByOneLabel : AbstractIndexCreationTask<FeedPost, FeedAnnouncementByOneLabel.Result>
{
    public class Result
    {
        public string Label1 { get; set; }
        public string FeedOwner { get; set; }
        public DateTimeOffset CreationDate { get; set; }
    }
    public FeedAnnouncementByOneLabel()
    {
        Map = announcements => from doc in announcements
                               from label in doc.Labels.DefaultIfEmpty()
                               select new 
                               {
                                   CreationDate = (DateTimeOffset)doc.CreationDate,
                                   FeedOwner = doc.FeedOwner,
                                   Label1 = label.Text
                               };

        Reduce = results => from result in results
                            group result by result.Label1
                                into r
                                select new
                                {
                                    CreationDate = (DateTimeOffset)r.Max(x => x.CreationDate),
                                    FeedOwner = r.Select(x=> x.FeedOwner).First(),
                                    Label1 = r.Key,
                                };
    }
}
于 2012-05-24T09:58:15.360 に答える