Domanda

Sto cercando la migrazione di un'applicazione Web esistente da utilizzare RavenDB.

Al momento ho pagine mia applicazione web che consentono di visualizzare le categorie, sottocategorie e risorse sulla base di un id nel querystring.

Comunque ho notato che RavenDB genera ID per radici di aggregazione, ma non per entità figlio.

Non credo sottocategoria è una radice di aggregazione (una categoria ha sottocategorie), così lo sto rendendo un sub-documento del mio documento Categoria.

Mi sbaglio per renderlo un sub-documento come sto accedendo direttamente dal suo id passato nella sul querystring? Ma se non, come devo accedere alle singole sottocategorie di RavenDB non sembra generare ID per gli enti che non sono radici di aggregazione?

È stato utile?

Soluzione

C'è un lunga ma interessante discussione sopra sulla mailing list Raven di questa situazione esatta.

La risposta breve è che Raven non è progettato per fare questo, solo le entità di radice ottenere un id, tutto il resto è trattata come un tipo di valore. Ma è possibile implementare da soli, vedere il codice di esempio alla fine della filettatura per informazioni.

Altri suggerimenti

mi sono imbattuto in questo problema, ma non era confortevole con lasciando che i documenti di generare l'ID è come non mi sentivo che era sicuro del filo, in particolare per gli ambienti basati su web.

Alla fine ho deciso di lasciare che il server di generare l'ID del per me utilizzando un metodo GenerateDocumentKey in questo modo:

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

In questo modo sto permettendo al database per generare il bambino ID e posso assicurare che non avrò per soddisfare le condizioni di gara, ecc nella classe vero e proprio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top