Пример #1
0
        public void Run()
        {
            var testLimit = 1000000;

            var pubs = GetPublishers().Take(testLimit);

            _c.AddRange(pubs);
            _c.SaveChanges();

            var authors = GetAuthors().Take(testLimit);

            _c.AddRange(authors);
            _c.SaveChanges();


            IEnumerable <Subject> subjects = GetSubjects().Take(testLimit);

            _c.AddRange(subjects);
            _c.SaveChanges();

            SeedCategories();

            pubs     = _c.Query <Publisher>().ToList();
            authors  = _c.Query <Author>().ToList();
            subjects = _c.Query <Subject>().ToList();
            var cats = _c.Query <Category>().ToList();

            IEnumerable <Book> books = GetBooks(pubs, authors, cats, subjects).Take(testLimit);

            foreach (var b in books)
            {
                try
                {
                    _c.Add(b);
                    _c.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {
                    _log.Error("Could not save book {0}, reason: {1}", b.Title, e.Message);
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        _log.Error("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                   eve.Entry.Entity.GetType().Name, eve.Entry.State);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            _log.Error("- Property: \"{0}\", Error: \"{1}\"",
                                       ve.PropertyName, ve.ErrorMessage);
                        }
                    }
                    _c.LocalClear <Book>();
                }
                catch (Exception ex)
                {
                    _log.Error("Could not save book {0}, reason: {1}", b.Title, ex.Message);
                }
            }
        }
Пример #2
0
 public IEnumerable <Book> GetMostRecentBooks(int size)
 {
     return(db.Query <Book>().OrderByDescending(b => b.CreationDate).Take(size));
 }
Пример #3
0
        // GET: Books
        public ActionResult Index(string sortOrder, string currentFilter, string bookCategory, string serie, string searchString, int?page, bool noPaging = false)
        {
            ViewBag.CurrentSort = sortOrder;

            /*
             * ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "name";
             * ViewBag.AuthorSortParm = String.IsNullOrEmpty(sortOrder) ? "author_desc" : "author";
             * ViewBag.PublisherSortParm = String.IsNullOrEmpty(sortOrder) ? "publisher_desc" : "publisher";
             * ViewBag.YearSortParm = String.IsNullOrEmpty(sortOrder) ? "year_desc" : "year";
             * ViewBag.CategorySortParm = String.IsNullOrEmpty(sortOrder) ? "category_desc" : "category";
             * ViewBag.SerieSortParm = String.IsNullOrEmpty(sortOrder) ? "serie_desc" : "serie";
             *
             * if (!String.IsNullOrEmpty(sortOrder) && sortOrder.Contains("_"))
             * {
             *  string[] sort = sortOrder.ToLowerInvariant().Split(new [] { '_' });
             *
             *  if (sort[0].Equals("name"))
             *  {
             *      ViewBag.NameSortParm = sort[1].Equals("desc") ? "name_desc" : "name_asc";
             *  }
             *  else if (sort[0].Equals("author"))
             *  {
             *      ViewBag.AuthorSortParm = sort[1].Equals("desc") ? "author_desc" : "author_asc";
             *  }
             * }
             * else
             * {
             *  // default sort on name
             *  sortOrder = "name_asc";
             * }
             */

            if (searchString != null)
            {
                page = 1;
            }
            else
            {
                searchString = currentFilter;
            }

            ViewBag.CurrentFilter = searchString;

            var books = _db.Query <Book>();

            if (!string.IsNullOrEmpty(searchString))
            {
                books = books.Where(s => s.Title.Contains(searchString) ||
                                    s.AlternativeTitle.Contains(searchString) ||
                                    s.Authors.Count(a => a.Lastname.Contains(searchString)) > 0);
            }
            if (!string.IsNullOrEmpty(bookCategory))
            {
                books = books.Where(x => x.Category.Title == bookCategory);
            }
            if (!string.IsNullOrEmpty(serie))
            {
                books = books.Where(x => x.Serie == serie);
            }
            switch (sortOrder)
            {
            case "name_desc":
                books = books.OrderByDescending(s => s.Title);
                break;

            case "publisher_asc":
                books = books.OrderBy(s => s.Publisher.Name);
                break;

            case "publisher_desc":
                books = books.OrderByDescending(s => s.Publisher.Name);
                break;

            /*case "author_asc":
             *  books = books.OrderBy(s => s.MainAuthor);
             *  break;
             * case "author_desc":
             *  books = books.OrderByDescending(s => s.MainAuthor);
             *  break;*/
            case "category_asc":
                books = books.OrderBy(s => s.Category.Title);
                break;

            case "category_desc":
                books = books.OrderByDescending(s => s.Category.Title);
                break;

            case "year_asc":
                books = books.OrderBy(s => s.ActualPrintYear);
                break;

            case "year_desc":
                books = books.OrderByDescending(s => s.ActualPrintYear);
                break;

            case "serie_asc":
                books = books.OrderBy(s => s.Serie);
                break;

            case "serie_desc":
                books = books.OrderByDescending(s => s.Serie);
                break;

            default:      // Default Name ascending
                books = books.OrderBy(s => s.Title);
                break;
            }

            // Eager load authors, categories and publishers
            books.Include(a => a.Authors);
            books.Include(a => a.Category);
            books.Include(a => a.Publisher);

            AddCategoriesForDropDownFilter();
            AddSerieForDropDownFilter();

            int pageSize   = 20;
            int pageNumber = (page ?? 1);

            return(View(books.ToPagedList(pageNumber, pageSize)));
        }