使用值对象作为 RavenDB .NET 客户端的标识符

Using value object as as identifier with RavenDB .NET client

我正在寻找一个示例,说明如何使用自定义 class 作为 RavenDB .NET 客户端的标识符。我有这样的东西:

class Product
{
    public ProductId Id { get; }

    public Product()
    {
        Id = new ProductId(Guid.NewGuid());
    }
    // ...
}

其中 ProductId 如下所示:

class ProductId
{
    public Guid Value { get; }
    
    public ProductId(Guid value)
    {
        // validation
        Value = value
    }
}

我没有在文档中找到关于该主题的任何信息。有谁知道这样做吗?

文档标识符(文档 ID)始终是与文档关联的 字符串
参见:https://ravendb.net/docs/article-page/5.0/csharp/server/kb/document-identifier-generation

您可以让服务器为您生成 Guid:.
参见:https://ravendb.net/docs/article-page/5.0/csharp/server/kb/document-identifier-generation#guid
为此,您分配:Id = string.Empty
参见:https://ravendb.net/docs/article-page/5.0/csharp/client-api/document-identifiers/working-with-document-identifiers#autogenerated-ids

否则,也许:

  1. 将当前Id属性重构为:
    public ProductId MyId { get; } 并用
    初始化 MyId = new ProductId(Guid.NewGuid());

  2. Product class
    上再添加一个 属性 public string Id { get; set; }

  3. 使用OnBeforeStore分配:
    Id = MyId.Value