Ravendb-修补字符串列表

Ravendb-修补字符串列表,ravendb,Ravendb,使用Ravendb(Build960),我试图对一组文档执行批量更新,以替换字符串列表中的单个值。我用它作为代码的基础,因为请求几乎相同,但由于某种原因,它们能够在我的错误消失时工作。我编写了以下示例控制台应用程序来演示这个问题 public class Document { public const string OLD_NAME = "Label A"; public const string NEW_NAME = "Label B"; public Documen

使用Ravendb(Build960),我试图对一组文档执行批量更新,以替换字符串列表中的单个值。我用它作为代码的基础,因为请求几乎相同,但由于某种原因,它们能够在我的错误消失时工作。我编写了以下示例控制台应用程序来演示这个问题

public class Document
{
    public const string OLD_NAME = "Label A";
    public const string NEW_NAME = "Label B";

    public Document()
    {
        Labels = new List<string> { OLD_NAME };
    }

    public string Id { get; set; }
    public IList<string> Labels { get; set; }
}

public class Document_By_Labels : AbstractIndexCreationTask<Document>
{
    public Document_By_Labels()
    {
        Map = leads => from doc in leads select new {doc.Labels};
    }
}

internal class Program
{
    private static void Main(string[] args)
    {
        IDocumentStore store = new DocumentStore
        {
            Url = "http://localhost:8081",
            DefaultDatabase = "RavendbPatchStringListTest"
        }.Initialize();
        IndexCreation.CreateIndexes(typeof (Program).Assembly, store);

        using (IDocumentSession session = store.OpenSession())
        {
            var s = new Document();
            session.Store(s);
            session.SaveChanges();

            var d = session.Load<Document>(s.Id);
            var m = session.Advanced.GetMetadataFor(d);
        }

        store.DatabaseCommands.UpdateByIndex("Document/By/Labels",
                                             new IndexQuery {Query = string.Format("Labels:\"{0}\"", Document.OLD_NAME)},
                                             new[]
                                             {
                                                 new PatchRequest
                                                 {
                                                     Type = PatchCommandType.Modify,
                                                     Name = "Labels",
                                                     AllPositions = true,
                                                     Nested =
                                                         new[]
                                                         {
                                                             new PatchRequest
                                                             {
                                                                 Type = PatchCommandType.Remove,
                                                                 Value = new RavenJValue(Document.OLD_NAME)
                                                             },
                                                             new PatchRequest
                                                             {
                                                                 Type = PatchCommandType.Add,
                                                                 Value = new RavenJValue(Document.NEW_NAME)
                                                             }
                                                         }
                                                 }
                                             }, allowStale: true);
    }
}
公共类文档
{
public const string OLD_NAME=“Label A”;
public const string NEW_NAME=“Label B”;
公共文件()
{
标签=新列表{旧名称};
}
公共字符串Id{get;set;}
公共IList标签{get;set;}
}
公共类文档按标签:AbstractIndexCreationTask
{
公共文件(按标签)
{
Map=leads=>from doc in leads选择new{doc.Labels};
}
}
内部课程计划
{
私有静态void Main(字符串[]args)
{
IDocumentStore=新文档存储
{
Url=”http://localhost:8081",
DefaultDatabase=“RavendbPatchStringListTest”
}.Initialize();
CreateIndexes(typeof(Program).Assembly,store);
使用(IDocumentSession=store.OpenSession())
{
var s=新文档();
会议。商店;
session.SaveChanges();
var d=会话加载(s.Id);
var m=session.Advanced.GetMetadataFor(d);
}
store.DatabaseCommands.UpdateByIndex(“Document/By/Labels”,
新索引查询{Query=string.Format(“标签:\“{0}\”,Document.OLD\u NAME)},
新[]
{
新的补丁请求
{
Type=PatchCommandType.Modify,
Name=“标签”,
所有位置=真,
嵌套=
新[]
{
新的补丁请求
{
类型=PatchCommandType。删除,
值=新值(文档.旧名称)
},
新的补丁请求
{
类型=PatchCommandType.Add,
值=新值(Document.new\u名称)
}
}
}
},allowStale:true);
}
}
当我跑步时,我得到:

System.InvalidCastException: Unable to cast object of type 'Raven.Json.Linq.RavenJValue' to type 'Raven.Json.Linq.RavenJObject'.
   at Raven.Json.Linq.Extensions.Convert[U](RavenJToken token, Boolean cast) in c:\Builds\RavenDB-Stable\Raven.Abstractions\Json\Linq\Extensions.cs:line 131
   at Raven.Json.Linq.Extensions.Convert[U](RavenJToken token) in c:\Builds\RavenDB-Stable\Raven.Abstractions\Json\Linq\Extensions.cs:line 116
   at Raven.Json.Linq.Extensions.Value[U](RavenJToken value) in c:\Builds\RavenDB-Stable\Raven.Abstractions\Json\Linq\Extensions.cs:line 24
   at Raven.Database.Json.JsonPatcher.ModifyValue(PatchRequest patchCmd, String propName, RavenJToken property) in c:\Builds\RavenDB-Stable\Raven.Database\Json\JsonPatcher.cs:line 138
   at Raven.Database.Json.JsonPatcher.Apply(PatchRequest patchCmd) in c:\Builds\RavenDB-Stable\Raven.Database\Json\JsonPatcher.cs:line 61
   at Raven.Database.Json.JsonPatcher.Apply(PatchRequest[] patch) in c:\Builds\RavenDB-Stable\Raven.Database\Json\JsonPatcher.cs:line 30
   at Raven.Database.DocumentDatabase.<>c__DisplayClassc1.<ApplyPatch>b__be(IStorageActionsAccessor actions) in c:\Builds\RavenDB-Stable\Raven.Database\DocumentDatabase.cs:line 1150
   at Raven.Storage.Esent.TransactionalStorage.Batch(Action`1 action) in c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:line 330
   at Raven.Database.DocumentDatabase.ApplyPatch(String docId, Nullable`1 etag, PatchRequest[] patchDoc, TransactionInformation transactionInformation) in c:\Builds\RavenDB-Stable\Raven.Database\DocumentDatabase.cs:line 1131
   at Raven.Database.Impl.DatabaseBulkOperations.<>c__DisplayClass2.<UpdateByIndex>b__1(String docId, TransactionInformation tx) in c:\Builds\RavenDB-Stable\Raven.Database\Impl\DatabaseBulkOperations.cs:line 42
   at Raven.Database.Impl.DatabaseBulkOperations.<>c__DisplayClassa.<PerformBulkOperation>b__5(IStorageActionsAccessor actions) in c:\Builds\RavenDB-Stable\Raven.Database\Impl\DatabaseBulkOperations.cs:line 80
   at Raven.Storage.Esent.TransactionalStorage.ExecuteBatch(Action`1 action) in c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:line 376
   at Raven.Storage.Esent.TransactionalStorage.Batch(Action`1 action) in c:\Builds\RavenDB-Stable\Raven.Storage.Esent\TransactionalStorage.cs:line 337
   at Raven.Database.Impl.DatabaseBulkOperations.PerformBulkOperation(String index, IndexQuery indexQuery, Boolean allowStale, Func`3 batchOperation) in c:\Builds\RavenDB-Stable\Raven.Database\Impl\DatabaseBulkOperations.cs:line 75
   at Raven.Database.Impl.DatabaseBulkOperations.UpdateByIndex(String indexName, IndexQuery queryToUpdate, PatchRequest[] patchRequests, Boolean allowStale) in c:\Builds\RavenDB-Stable\Raven.Database\Impl\DatabaseBulkOperations.cs:line 40
   at Raven.Database.Server.Responders.DocumentBatch.<>c__DisplayClass3.<Respond>b__0(String index, IndexQuery query, Boolean allowStale) in c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\DocumentBatch.cs:line 47
   at Raven.Database.Server.Responders.DocumentBatch.OnBulkOperation(IHttpContext context, Func`4 batchOperation) in c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\DocumentBatch.cs:line 64
   at Raven.Database.Server.Responders.DocumentBatch.Respond(IHttpContext context) in c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\DocumentBatch.cs:line 46
   at Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx) in c:\Builds\RavenDB-Stable\Raven.Database\Server\HttpServer.cs:line 550
   at Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx) in c:\Builds\RavenDB-Stable\Raven.Database\Server\HttpServer.cs:line 316
System.InvalidCastException:无法将类型为“Raven.Json.Linq.RavenJValue”的对象强制转换为类型为“Raven.Json.Linq.RavenJObject”。
在c:\Builds\RavenDB Stable\Raven.Abstractions\Json\Linq\Extensions.cs中的Raven.Json.Linq.Extensions.Convert[U](RavenJToken令牌,布尔型转换)处:第131行
在c:\Builds\RavenDB Stable\Raven.Abstractions\Json\Linq\Extensions.cs中的Raven.Json.Linq.Extensions.Convert[U](RavenJToken令牌)中
位于c:\Builds\RavenDB Stable\Raven.Abstractions\Json\Linq\Extensions.cs中的Raven.Json.Linq.Extensions.Value[U](RavenJToken值):第24行
在c:\Builds\RavenDB Stable\Raven.Database\Json\Json\JsonPatcher.cs中的Raven.Database.JsonPatcher.ModifyValue(PatchRequest patchCmd,String propName,RavenJToken属性)处
在c:\Builds\RavenDB Stable\Raven.Database\Json\JsonPatcher.cs中的Raven.Database.Json.JsonPatcher.Apply(PatchRequest patchCmd)中:第61行
在c:\Builds\RavenDB Stable\Raven.Database\Json\JsonPatcher.cs中的Raven.Database.Json.JsonPatcher.Apply(PatchRequest[]patch)中:第30行
在Raven.Database.DocumentDatabase.c__中,以c:\Builds\RavenDB Stable\Raven.Database\DocumentDatabase.cs:行1150显示ClassC1.b__be(iStorageActionsAccess操作)
在c:\Builds\RavenDB Stable\Raven.Storage.Esent\TransactionalStorage.cs中的Raven.Storage.Esent.TransactionalStorage.Batch(Action`1 Action)处:第330行
在c:\Builds\RavenDB Stable\Raven.Database\DocumentDatabase.cs中的Raven.Database.DocumentDatabase.ApplyPatch(字符串docId,可空`1 etag,PatchRequest[]patchDoc,transactionformation transactionformation)中
在Raven.Database.Impl.DatabaseBulkOperations.c\uuu中,以c:\Builds\RavenDB Stable\Raven.Database\Impl\DatabaseBulkOperations.cs:第42行显示Class2.b\uu 1(字符串docId,TransactionInformation tx)
在Raven.Database.Impl.DatabaseBulkOperations.c_uu中,以c:\Builds\RavenDB Stable\Raven.Database\Impl\DatabaseBulkOperations.cs:第80行显示ClassA.b_uu5(iStorageActionsAccess操作)
在c:\Builds\RavenDB Stable\Raven.Storage.Esent\TransactionalStorage.cs中的Raven.Storage.Esent.TransactionalStorage.ExecuteBatch(操作'1 Action'):第376行
在c:\Builds\RavenDB Stable\Raven.Storage.Esent\TransactionalStorage.cs中的Raven.Storage.Esent.TransactionalStorage.Batch(Action`1 Action)处:第337行
在c:\Builds\RavenDB Stable\Raven.Database\Impl\DatabaseBulkOperations.PerformBulkOperation中的Raven.Database.Impl.DatabaseBulkOperations.PerformBulkOperation(字符串索引、索引查询、布尔allowStale、Func`3 batchOperation):第75行
在c:\Builds\RavenDB Stable\Rav中的Raven.Database.Impl.DatabaseBulkOperations.UpdateByIndex(字符串索引名,索引查询查询更新,PatchRequest[]patchRequests,布尔allowStale)中