public async Task <Tuple <int, List <Todo> > > FetchMany(int page      = 1, int pageSize = 5,
                                                                 TodoShow show = TodoShow.All)
        {
            using (var session = _sessionFactoryBuilder.GetSessionFactory().OpenSession())
            {
                var offset = (page - 1) * pageSize;
                IQueryable <Todo> queryable = null;

                if (show == TodoShow.Completed)
                {
                    queryable = session.Query <Todo>().Where(t => t.Completed);
                }
                else if (show == TodoShow.Pending)
                {
                    queryable = session.Query <Todo>().Where(t => !t.Completed);
                }


                int         totalCount;
                List <Todo> todos;

                if (queryable != null)
                {
                    totalCount = await queryable.CountAsync();

                    todos = await queryable.Skip(offset).Take(pageSize).Select(t => new Todo
                    {
                        Id        = t.Id,
                        Title     = t.Title,
                        Completed = t.Completed,
                        CreatedAt = t.CreatedAt,
                        UpdatedAt = t.UpdatedAt
                    }).ToListAsync();
                }
                else
                {
                    totalCount = await session.Query <Todo>().CountAsync();

                    todos = await session.Query <Todo>().Skip(offset).Take(pageSize).Select(t => new Todo
                    {
                        Id        = t.Id,
                        Title     = t.Title,
                        Completed = t.Completed,
                        CreatedAt = t.CreatedAt,
                        UpdatedAt = t.UpdatedAt
                    }).ToListAsync();
                }

                return(Tuple.Create(totalCount, todos));
            }
        }
Пример #2
0
        public async Task <List <Todo> > FetchMany(TodoShow show = TodoShow.All)
        {
            using (var session = _sessionFactoryBuilder.GetSessionFactory().OpenSession())
            {
                IQueryable <Todo> queryable = null;

                if (show == TodoShow.Completed)
                {
                    queryable = session.Query <Todo>().Where(t => t.Completed);
                }
                else if (show == TodoShow.Pending)
                {
                    queryable = session.Query <Todo>().Where(t => !t.Completed);
                }


                List <Todo> todos;
                if (queryable != null)
                {
                    todos = await queryable.Select(t => new Todo
                    {
                        Id        = t.Id,
                        Title     = t.Title,
                        Completed = t.Completed,
                        CreatedAt = t.CreatedAt,
                        UpdatedAt = t.UpdatedAt
                    }).ToListAsync();
                }
                else
                {
                    todos = await session.Query <Todo>().Select(t => new Todo
                    {
                        Id        = t.Id,
                        Title     = t.Title,
                        Completed = t.Completed,
                        CreatedAt = t.CreatedAt,
                        UpdatedAt = t.UpdatedAt
                    }).ToListAsync();
                }


                return(todos);
            }
        }
        public async Task <List <Todo> > FetchMany(TodoShow show = TodoShow.All)
        {
            using (var session = _sessionFactoryBuilder.GetSessionFactory().OpenSession())
            {
                // Retrieve hwo many articles with our criteria(All, Completed or Pending)
                IQueryable <Todo> queryable = session.Query <Todo>().OrderBy(t => t.CreatedAt);

                if (show == TodoShow.Completed)
                {
                    queryable = queryable.Where(t => t.Completed);
                }
                else if (show == TodoShow.Pending)
                {
                    queryable = queryable.Where(t => !t.Completed);
                }


                List <Todo> todos;
                if (show != TodoShow.All)
                {
                    // https://stackoverflow.com/questions/5325797/the-entity-cannot-be-constructed-in-a-linq-to-entities-query
                    // for complete/pending
                    todos = await queryable
                            .Select(t => new Todo
                    {
                        Id        = t.Id,
                        Title     = t.Title,
                        Completed = t.Completed,
                        CreatedAt = t.CreatedAt,
                        UpdatedAt = t.UpdatedAt
                    })
                            .ToListAsync();
                }
                else
                {
                    todos = await queryable.ToListAsync();
                }


                return(todos);
            }
        }
Пример #4
0
        private static async Task SeedTodos(ISessionFactoryBuilder sessionFactoryBuilder)
        {
            using (var session = sessionFactoryBuilder.GetSessionFactory().OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    var todosCount = await session.Query <Todo>().CountAsync();

                    var todosToSeed = 32;
                    todosToSeed -= todosCount;
                    if (todosToSeed > 0)
                    {
                        Console.WriteLine($"[+] Seeding {todosToSeed} Todos");
                        var faker = new Faker <Todo>()
                                    .RuleFor(a => a.Title, f => string.Join(" ", f.Lorem.Words(f.Random.Int(2, 5))))
                                    .RuleFor(a => a.Description, f => f.Lorem.Sentences(f.Random.Int(1, 10)))
                                    .RuleFor(t => t.Completed, f => f.Random.Bool(0.4f))
                                    .RuleFor(a => a.CreatedAt,
                                             f => f.Date.Between(DateTime.Now.AddYears(-5), DateTime.Now.AddDays(-1)))
                                    .FinishWith((f, todoInstance) =>
                        {
                            todoInstance.UpdatedAt =
                                f.Date.Between(todoInstance.CreatedAt.Value, DateTime.Now);
                        });

                        var todos = faker.Generate(todosToSeed);
                        foreach (var todo in todos)
                        {
                            await session.SaveAsync(todo);
                        }

                        await transaction.CommitAsync();
                    }
                }
            }
        }