Ravendb: Идентификационная генерация для поддесположений

StackOverflow https://stackoverflow.com/questions/3167002

Вопрос

Я пытаюсь перенести существующее веб-приложение для использования RavendB.

В настоящее время у меня есть страницы в моей веб-приложении, которые позволяют просматривать категории, подкатегории и ресурсы на основе идентификатора в QueryString.

Однако я замечаю, что RavendB генерирует идентификаторы для совокупных корней, но не для детских объектов.

Я не думаю, что подкатегория - это совокупный корень (в категории есть подкатегории), поэтому делаю это поддесят документ моей категории.

Я ошибаюсь, чтобы сделать это поддесяцем, так как я доступа к нему напрямую, переданный его идентификатором, переданному в квитанции? Но если нет, как я должен получить доступ к индивидуальным подкатегориям, так как RavendB, похоже, не генерирует идентификаторы для объектов, которые не являются совокупными корнями?

Это было полезно?

Решение

Это долгое, но интересное обсуждение ВКЛ в списке рассылки ворона об этой точной ситуации.

Краткий ответ - это то, что raven не предназначен для этого, только корневые объекты получают удостоверение личности, все остальное рассматривается как тип значения. Но вы можете реализовать его самостоятельно, см. Образец кода в конце потока для информации.

Другие советы

Я столкнулся с этой проблемой, но не чувствовал себя комфортно, чтобы документы генерируют удостоверение личности, поскольку я не чувствовал, что это безопасно для потоков, особенно для веб-среды.

В конце концов я решил позволить серверу генерировать идентификатор для меня, используя метод GeneratedocumentKey, как так:

using (var session = Store.OpenSession())
{
    if(category.SubCategories != null)
    {
       var newSubCategories = data.BankAccounts.Where(x => string.IsNullOrEmpty(x.Id));
        foreach (var sc in newSubCategories)
            sc.Id = session.Advanced.Conventions.GenerateDocumentKey(sc);    
    }

    session.Store(data);
    session.SaveChanges();
}

Таким образом, я позволю в базу данных генерировать идентификатор ребенка и может гарантировать, что мне не придется удовлетворить условия гонок и т. Д. В самом актуальном классе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top