Question

Je suis en train de migrer une application Web existante à utiliser RavenDB.

J'ai actuellement des pages dans mon application web qui vous permettent de visualiser les catégories, sous-catégories et des ressources basée sur un identifiant dans le querystring.

Cependant, je remarque que RavenDB génère ids pour les racines globales, mais pas pour les entités enfants.

Je ne pense pas que la sous-catégorie est une racine globale (une catégorie a sous-catégories), donc fais un sous-document mon document de catégorie.

Ai-je tort d'en faire un sous-document je y accéder directement par son id passé dans le querystring? Mais sinon, comment dois-je avoir accès individuels RavenDB Sous-catégories ne semble pas générer ids pour les entités qui ne sont pas des racines globales?

Était-ce utile?

La solution

Il y a un longue mais intéressante discussion sur la liste de diffusion Raven cette situation exacte.

La réponse courte est que Raven n'a pas été conçu pour ce faire, que les entités racines se faire une id, tout le reste est traité comme un type de valeur. Mais vous pouvez implémenter vous-même, voir l'exemple de code à la fin du fil pour plus d'informations.

Autres conseils

je suis tombé sur ce problème, mais n'a pas été à l'aise avec laisser les documents générer l'ID est que je ne me sentais pas qu'il était sûr de fil, en particulier pour les environnements basés sur le Web.

Finalement, j'ai décidé de laisser le serveur générer l'identifiant est pour moi en utilisant une méthode de la GenerateDocumentKey comme ceci:

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();
}

De cette façon, je suis la base de données permettant de générer l'enfant id et peut faire en sorte que je ne pas avoir à répondre à des conditions de course, etc dans la classe elle-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top