RavenDB 的 BulkInsert 错误:文档 ID 必须具有非空值

BulkInsert error with RavenDB: Document id must have a non empty value

我正在使用RavenDB 4.0.6的BulkInsert操作插入一堆产品:

    using (var bulk = Store.BulkInsert())
    {
        foreach (var p in products)
        {
            p.Id = string.Empty; // <-- notice this
            await bulk.StoreAsync(p);
        }
    }

请注意,我通过显式提供 string.Empty 作为 Id 属性 的值来故意跳过标识符创建策略。这是基于 RavenDB 文档,section Autogenerated ID's

当运行代码我得到错误:

System.InvalidOperationException : Document id must have a non empty value

直接由BulkInsertOperation.cs中的这段代码片段生成。

我的问题是如何防止此错误并仍然保持与其他代码相同的 ID 生成策略?

例如我从未将 Id 属性 设置为 string.Empty 以外的任何值。而且我担心将其设置为 Guid.NewGuid.ToString() 可能会导致其他问题(另请参阅 )。

对于批量操作,您必须将 Id 属性 保留为空(非空字符串)以使其自动生成顺序 ID,或者手动生成 Guid ID。

API批量插入和会话插入有点不一致:

using (var store = new DocumentStore() { Urls = new[] { "http://localhost:8080" } }.Initialize())
{
  using (var bulk = store.BulkInsert("Sample"))
  {
    bulk.Store(new SampleDocument { Name = "Bulk.Store Null Id", Id = null }); // Sequential Id (I.E. SampleDocuments/1-A)
    bulk.Store(new SampleDocument { Name = "Bulk.Store Blank Id", Id = "" }); // Throws Error
    bulk.Store(new SampleDocument { Name = "Bulk.Store Guid Id", Id = Guid.NewGuid().ToString() }); // Guid Id
  }

  using (var session = store.OpenSession("Sample"))
  {
    session.Store(new SampleDocument { Name = "Session.Store Null Id", Id = null }); // Sequential Id (I.E. SampleDocuments/2-A)
    session.Store(new SampleDocument { Name = "Session.Store Empty Id", Id = "" }); // Guid Id
    session.Store(new SampleDocument { Name = "Session.Store Guid Id", Id = Guid.NewGuid().ToString() }); // Guid Id
    session.SaveChanges();
  }
}