群集服务器上不同格式的RavenDB ID



我们在AWS上有一个DotNet Core API(C#(,带有集群RavenDB服务器(5.23(。创建文档时,Id会根据客户端的不同而有不同的格式。如果使用Swagger/Postman/xUnit Test,则我们得到Id="0";人/124-C";。如果第三方呼叫端点,则我们得到Id="0";人/000000000000000124-C";。请注意,第一个字符一个是小写,另一个是大写。此人。在保存实体之前,Id(字符串(属性设置为null。

没有Id格式的自定义配置。唯一的约定集是MaxNumberOfRequestsPerSession。我读过关于Id(服务器Id/Identity(的文档,但没有看到任何有用的东西。

为什么Id格式不同?如何确保它始终是正确的格式?不同国家、不同语言(但同一时区(的客户和AWS会以某种方式产生影响吗?

你看过这篇文章吗?

格式Person/0000000000000001234-C由服务器生成
请参见服务器端ID

格式CCD_ 2既可以由服务器生成;客户端
请参阅Hilo算法

RanenDB id不区分大小写。但这并不能改变现状。如果你设置了一个特定的id,RavenDB将按原样使用它。

短id("person/124-C"(通常来自Hilo如果使用Hilo生成id,则有多种方法可以控制前缀。

  1. 您可以注册id约定-https://ravendb.net/docs/article-page/4.2/faq/client-api/configuration/identifier-generation/type-specific
  2. 您可以更改查找集合名称约定-https://ravendb.net/docs/article-page/5.2/csharp/client-api/session/configuration/how-to-customize-collection-assignment-for-entities

长id("Person/00000000000000000124-C"(通常来自服务器要使用服务器端,您可以使用前缀"来存储文档;人/";(或"人/"并且RavenDB保留该案件(。

https://ravendb.net/docs/article-page/5.0/csharp/server/kb/document-identifier-generationhttps://ravendb.net/docs/article-page/4.2/faq/client-api/configuration/identifier-generation/global

https://github.com/ravendb/ravendb/discussions/13111

class TestObj
{
public string Id { get; set; }
}
class TestObj3
{
public string Id { get; set; }
}
class TestObj2
{
public string Id { get; set; }
public string Prop { get; set; }
}
[Fact]
public async Task TestCase()
{
using var store = GetDocumentStore(new Options
{
ModifyDocumentStore = s =>
{
s.Conventions.FindCollectionName = t => t == typeof(TestObj) ? t.Name.ToLower() : null;
s.Conventions.RegisterAsyncIdConvention<TestObj2>((s1, class2) => Task.FromResult($"testClass2/{class2.Prop}"));
}
});
using (var session = store.OpenAsyncSession())
{
var testObj = new TestObj();
await session.StoreAsync(testObj); // "testobj/1-A"
var testObj2 = new TestObj2{Prop = "Something"}; 
await session.StoreAsync(testObj2); // "testClass2/Something"

var testObj3 = new TestObj3();
await session.StoreAsync(testObj3); // "TestObj3s/1-A"

var testObj4 = new TestObj3();
await session.StoreAsync(testObj4, "TestObj/"); // "TestObj/0000000000000000006-A"

var testObj5 = new TestObj3();
await session.StoreAsync(testObj5, "testobj/"); // "TestObj/0000000000000000006-A"

await session.SaveChangesAsync();
}
}

最新更新