コード例 #1
0
        private async Task <Author> ComplexMapFromAuthorDBToAuthor(AuthorDocument authorFromDB,
                                                                   Raven.Client.Documents.Session.IAsyncDocumentSession session) //Estamos usando, al pasar la sesión abierta, los datos que hemos precargado en memoria.
                                                                                                                                 //El límite de operaciones por sesión a base de datos ya no nos afecta (!)
        {
            var convertedAuthor = _mapper.Map <Author>(authorFromDB);                                                            //For each author, recover the mapping.
                                                                                                                                 //
            // var coursesFromDB = await session.LoadAsync<CourseDocument>(authorFromDB.CoursesIds.ToArray());
            //¡Aquí se carga un diccionario porque también van los ids! Confirmar.

            var coursesFromDB = await session.LoadAsync <CourseDocument>(authorFromDB.CoursesIds.ToArray());

            var x = coursesFromDB.Values.ToList <CourseDocument>();

            var convertedCourses = _mapper.Map <List <Course> >(x);

            convertedAuthor.Courses = convertedCourses;

            return(convertedAuthor);
        }
コード例 #2
0
        //Este método nunca se llama desde el controlador: lo que ocurre es que se le llama desde el paginador
        // para que haga el trabajo sucio de base de datos y todo eso.
        public async Task <IEnumerable <Author> > GetAuthors(Raven.Client.Documents.Session.IAsyncDocumentSession session)
        {
            var authorsFromDb = await session
                                .Query <AuthorDocument>()
                                .OfType <AuthorDocument>()
                                .Include(x => x.CoursesIds)         //Include: cláusula de la query. Precárgame este Id y luego dámelo
                                                                    //(así te ahorras un viaje a base de datos).
                                .ToListAsync();

            var authors = new List <Author>();

            foreach (AuthorDocument authorDB in authorsFromDb)                                    //Iterate through all authors.
            {
                Author convertedAuthor = await ComplexMapFromAuthorDBToAuthor(authorDB, session); //Note this loads all courses for every author, but the author of those courses is empty.

                authors.Add(convertedAuthor);
            }

            return(authors);
        }
コード例 #3
0
        static async Task <TUserAuth> LoadOrCreateFromSessionAsync(IAuthSession authSession, Raven.Client.Documents.Session.IAsyncDocumentSession session)
        {
            TUserAuth userAuth;

            if (!authSession.UserAuthId.IsNullOrEmpty())
            {
                var ravenKey = RavenIdConverter.ToString(UserAuthCollectionName, int.Parse(authSession.UserAuthId));
                userAuth = await session.LoadAsync <TUserAuth>(ravenKey);
            }
            else
            {
                userAuth = authSession.ConvertTo <TUserAuth>();
            }
            return(userAuth);
        }