RavenDB 4.2 - автоматически сгенерированное поле идентификатора - PullRequest
1 голос
/ 06 марта 2020

Я создаю базовый c API с RavenDB и .NetCore 3.1 MVC. Я использую автоматически сгенерированное поле идентификатора "Modelnames / 123-ClusterInstance". Так как мои контроллеры по умолчанию будут использовать myapi.com/api/ssolinks/ndomid}, поле будет myapi.com/api/ssolinks/SSOLinks/123-ClusterInstance (идентификатор). Как бы вы посоветовали мне обойти это? Я нашел старый пост SO здесь: Autogenerated Id в 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);
            }
        }
    }
}

1 Ответ

2 голосов
/ 11 марта 2020

Ваша текущая реализация выглядит нормально - вы получаете идентификатор из параметров URL, а затем получаете его с сервера RavenDB.

Вы можете использовать startswith & matches в параметрах URL.
См. В Параметры строки запроса в Получить документы по префиксу

Из сеанса вы можете использовать LoadStartingWith т.е.

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