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();
}
}
我正在使用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();
}
}