RavenDB 4.2 - 自动生成的 ID 字段

RavenDB 4.2 - Auto Generated ID Field

我正在使用 RavenDB 和 .NetCore 3.1 MVC 创建一个基本的 API。我正在使用自动生成的 ID 字段,即 "Modelnames/123-ClusterInstance"。由于我的控制器将默认为 myapi.com/api/ssolinks/{id},该字段最终将成为 myapi.com/api/ssolinks/SSOLinks/123-ClusterInstance(id ).你会如何建议我解决这个问题?我在这里找到了一个旧的 SO post:Autogenerated Id in RavenDB 但文档似乎不见了。我通过将它附加到 HTTP 请求中来解决它,但感觉很老套。感谢您的任何输入!

namespace myAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class SSOLinksController : ControllerBase
    {
        [HttpGet("{id}")]
        [ProducesResponseType(StatusCodes.Status200OK)]
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        public IActionResult Get(string Id)
        {
            //I want to NOT do this if possible :D
            Id = $"SSOLinks/{Id}";
            var store = DocumentStoreHolder.CreateStore();
            using (IDocumentSession session = store.OpenSession())
            {
                List<SSOLink> ssolinks = session
                    .Query<SSOLink>()
                    .Where(x => x.Id == Id)
                    .ToList();
                return Ok(ssolinks);
            }
        }
    }
}

您当前的实现似乎没问题 - 您从 URL 参数获取 ID,然后从 RavenDB 服务器获取它。

您可以在 URL 参数中使用 startswith& matches
请参阅 查询字符串参数 中的 Get Documents By Prefix

您可以在 Session 中使用 LoadStartingWith

 var linkResult = session
         .Advanced
         .LoadStartingWith<SSOLink>("SSOLinks/", <the Id>)
         .FirstOrDefault();