Pregunta

Estoy intentando migrar una aplicación web existente para utilizar RavenDB.

Actualmente tengo páginas de mi aplicación web que le permiten ver categorías, subcategorías y recursos sobre la base de un identificador en la cadena de consulta.

Sin embargo noto que RavenDB genera los identificadores para las raíces de agregados, pero no para las entidades secundarias.

No creo subcategoría es una raíz agregada (una categoría tiene subcategorías), por lo que estoy haciendo un sub-documento de mi documento categoría.

¿Estoy equivocada para que sea un sub-documento como que estoy acceder a él directamente por su id aprobada en la cadena de consulta? Pero si no, ¿cómo debería acceder SubCategorias individuales, no parece RavenDB para generar los identificadores para las entidades que no son agregados raíces?

¿Fue útil?

Solución

Hay una largo pero interesante discusión sobre en la lista de correo del cuervo por esta situación exacta.

La respuesta corta es que Raven no está diseñado para ello, sólo entidades raíz obtener un id, todo lo demás es tratado como un tipo de valor. Pero se puede aplicar por sí mismo, ver el ejemplo de código en el extremo del hilo para obtener información.

Otros consejos

me encontré con este problema, pero no se sentía cómodo con dejar que los documentos a generar el ID es como no me sentí que era seguro de rosca, en particular para entornos basados ??en la web.

Finalmente decidí dejar que el servidor genere el id de por mí usando un método GenerateDocumentKey este 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();
}

Esta forma en que estoy permitiendo que la base de datos para generar la identificación del niño y de puedo asegurar que no voy a tener para hacer frente a las condiciones de carrera, etc en la propia clase real.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top