首页 > 解决方案 > 使用值对象作为 RavenDB .NET 客户端的标识符

问题描述

我正在寻找一个如何使用自定义类作为 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
    }
}

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

标签: .netravendb

解决方案


文档标识符(文档 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在类上添加另一个属性
    public string Id { get; set; }

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


推荐阅读