コード例 #1
0
        public bool Add(BookDetailsBLL item, out string serverSideError)
        {
            //HACK: in manip bar impl, we try to insert a new book before working on it. Better approach possible.
            if (item.Description.Title == null)
                item.Description.Title = "New book";

            if (item.IsValid)
            {
                using (ProtoLibEntities context = new ProtoLibEntities())
                {
                    if (DatabaseDependantValidation(item,context, out serverSideError))
                    {
                        //Good to go.
                        BookDetails newBook = new BookDetails();
                        newBook.BookDimensions = new BookDimensions();
                        CrossLayerEntityConverter.BookDetailsBllToDal(context, item, newBook);
                        context.BookDetailsSet.AddObject(newBook);

                        context.SaveChanges();

                        return true;
                    }
                }

                return false;
            }
            else
            {
                //FIXME: return IDataErrorInfo validation
                serverSideError = "The BookDetails object is invalid";
                return false;
            }
        }
コード例 #2
0
        public BookSearchResult(int id, BookDetailsBLL.BookDescription description,
            BookDetailsBLL.BookPublishInfo publishInfo,
            string publisherName,
            BookDetailsBLL.BookDimensions dimensions,
            List<AuthorSummary> authors,
            List<string> categories, List<string> subjects)
        {
            BookDetailsID = id;

            Title = description.Title;
            TitleLong = description.TitleLong;
            Summary = description.Summary;
            Notes = description.Notes;
            AmazonLink = description.AmazonLink;
            Language = description.Language;

            ISBN13 = publishInfo.ISBN13;
            ISBN10 = publishInfo.ISBN10;
            EditionNumber = publishInfo.EditionNumber;
            EditionName = publishInfo.EditionName;
            Printing = publishInfo.Printing;
            DatePublished = publishInfo.DatePublished;

            Pages = dimensions.Pages;
            Height = dimensions.Height;
            Width = dimensions.Width;
            Thickness = dimensions.Thickness;
            Weight = dimensions.Weight;

            if (publishInfo.PublisherID == null)
            {
                Publisher = null;
            }
            else
                Publisher = new BookSearchResult.PublisherSummary((int)publishInfo.PublisherID,
                                                              publisherName);

            Authors = new ReadOnlyCollection<BookSearchResult.AuthorSummary>(authors);
            Categories = new ReadOnlyCollection<string>(categories);
            Subjects = new ReadOnlyCollection<string>(subjects);
        }
コード例 #3
0
        /// <summary>
        ///Doesn't support automatically adding NEW related entities... eg. authors,
        ///categories, etc.
        /// </summary>
        public static void BookDetailsBllToDal(ProtoLibEntities context, BookDetailsBLL bllBook, BookDetails dalBook)
        {
            dalBook.ISBN13 = bllBook.PublishInfo.ISBN13;
            dalBook.ISBN10 = bllBook.PublishInfo.ISBN10;
            dalBook.EditionNumber = bllBook.PublishInfo.EditionNumber;
            dalBook.EditionName = bllBook.PublishInfo.EditionName;
            dalBook.Printing = bllBook.PublishInfo.Printing;
            dalBook.DatePublished = bllBook.PublishInfo.DatePublished;

            dalBook.Title = bllBook.Description.Title;
            dalBook.TitleLong = bllBook.Description.TitleLong;
            dalBook.Summary = bllBook.Description.Summary;
            dalBook.Notes = bllBook.Description.Notes;
            dalBook.Language = bllBook.Description.Language;
            dalBook.AmazonLink = bllBook.Description.AmazonLink;

            dalBook.BookDimensions.Pages = bllBook.Dimensions.Pages;
            dalBook.BookDimensions.Height = bllBook.Dimensions.Height;
            dalBook.BookDimensions.Width = bllBook.Dimensions.Width;
            dalBook.BookDimensions.Thickness = bllBook.Dimensions.Thickness;
            dalBook.BookDimensions.Weight = bllBook.Dimensions.Weight;

            //HACK: Use LINQ intersects
            dalBook.Authors.Clear();
            foreach (int authorID in bllBook.AuthorIDs)
                dalBook.Authors.Add(context.Authors.First(a => a.AuthorID == authorID));

            dalBook.Categories.Clear();
            foreach (int categoryID in bllBook.CategoryIDs)
                dalBook.Categories.Add(context.Categories.First(c => c.CategoryID == categoryID));

            dalBook.Subjects.Clear();
            foreach (int subjectID in bllBook.SubjectIDs)
                dalBook.Subjects.Add(context.Subjects.First(s => s.SubjectID == subjectID));

            //dalBook.PublisherID = bllBook.PublishInfo.PublisherID;
            if (bllBook.PublishInfo.PublisherID != null)
                dalBook.Publisher = context.Publishers.First(p => p.PublisherID == (int)bllBook.PublishInfo.PublisherID);
        }
コード例 #4
0
        public static void BookDetailsDalToBll(ProtoLibEntities context, BookDetailsBLL bllBook, BookDetails dalBook)
        {
            bllBook.ItemID = dalBook.BookDetailsID;

            bllBook.PublishInfo.ISBN13 = dalBook.ISBN13;
            bllBook.PublishInfo.ISBN10 = dalBook.ISBN10;
            bllBook.PublishInfo.EditionNumber = dalBook.EditionNumber;
            bllBook.PublishInfo.EditionName = dalBook.EditionName;
            bllBook.PublishInfo.Printing = dalBook.Printing;
            bllBook.PublishInfo.DatePublished = dalBook.DatePublished;

            bllBook.Description.Title = dalBook.Title;
            bllBook.Description.TitleLong = dalBook.TitleLong;
            bllBook.Description.Summary = dalBook.Summary;
            bllBook.Description.Notes = dalBook.Notes;
            bllBook.Description.Language = dalBook.Language;
            bllBook.Description.AmazonLink = dalBook.AmazonLink;

            bllBook.Dimensions.Pages = dalBook.BookDimensions.Pages;
            bllBook.Dimensions.Height = dalBook.BookDimensions.Height;
            bllBook.Dimensions.Width = dalBook.BookDimensions.Width;
            bllBook.Dimensions.Thickness = dalBook.BookDimensions.Thickness;
            bllBook.Dimensions.Weight = dalBook.BookDimensions.Weight;

            bllBook.AuthorIDs.Clear();
            foreach (Author a in dalBook.Authors)
                bllBook.AuthorIDs.Add(a.AuthorID);

            bllBook.CategoryIDs.Clear();
            foreach (Category c in dalBook.Categories)
                bllBook.CategoryIDs.Add(c.CategoryID);

            bllBook.SubjectIDs.Clear();
            foreach (Subject s in dalBook.Subjects)
                bllBook.SubjectIDs.Add(s.SubjectID);

            bllBook.PublishInfo.PublisherID = bllBook.PublishInfo.PublisherID;
        }
コード例 #5
0
        private bool DatabaseDependantValidation(BookDetailsBLL bllBook, ProtoLibEntities context, 
            out string error,
            int isbnCheckIdToExclude = 0)
        {
            //Redundant validations... but they're needed if the presentation
            //layer does not ensure validity of these fields. (Mine does).
            //Sage say: validation be done in all layers.

            if (ValidateIsbn(bllBook.PublishInfo.ISBN13, bllBook.PublishInfo.ISBN10,
                             context, out error, isbnCheckIdToExclude) == false)
                return false;

            foreach (int authorID in bllBook.AuthorIDs)
                if (ValidateAuthorId(authorID, context) == false)
                {
                    error = "Non-existant author ID entered";
                    return false;
                }

            foreach (int catID in bllBook.CategoryIDs)
                if (ValidateCategoryId(catID, context) == false)
                {
                    error = "Non-existant category ID entered";
                    return false;
                }

            foreach (int subID in bllBook.SubjectIDs)
                if (ValidateSubjectId(subID, context) == false)
                {
                    error = "Non-existant subject ID entered";
                    return false;
                }

            return true;
        }
コード例 #6
0
        public bool Update(BookDetailsBLL newItem, out string serverSideError)
        {
            if (newItem.IsValid)
            {
                using (ProtoLibEntities context = new ProtoLibEntities())
                {
                    if (DatabaseDependantValidation(newItem, context, out serverSideError, newItem.ItemID))
                    {
                        BookDetails dalBook = (from b in context.BookDetailsSet
                                               where b.BookDetailsID == newItem.ItemID
                                               select b).Single();

                        CrossLayerEntityConverter.BookDetailsBllToDal(context, newItem, dalBook);
                        context.SaveChanges();

                        //FIXME: Remove assert!
                        Debug.Assert(serverSideError == null);
                        return true;
                    }
                    else
                        return false;
                }
            }

            //FIXME: Return IDataErrorInfo validation
            serverSideError = "Item is in an invalid state!";
            return false;
        }
コード例 #7
0
        public List<BookDetailsBLL> GetPreviousItems(int beforeItemID, int numItems)
        {
            List<BookDetailsBLL> retList = new List<BookDetailsBLL>();

            using (ProtoLibEntities context = new ProtoLibEntities())
            {
                var dalBooks = (from b in context.BookDetailsSet
                                where b.BookDetailsID < beforeItemID
                                orderby b.BookDetailsID descending
                                select b).Take(numItems);

                BookDetailsBLL bllBook = null;
                foreach (BookDetails dalBook in dalBooks)
                {
                    bllBook = new BookDetailsBLL();
                    CrossLayerEntityConverter.BookDetailsDalToBll(context, bllBook, dalBook);
                    retList.Add(bllBook);
                }
            }

            retList.Reverse();
            return retList;
        }
コード例 #8
0
        public List<BookDetailsBLL> GetFirstItems(int numItems)
        {
            List<BookDetailsBLL> retList = new List<BookDetailsBLL>();

            using (ProtoLibEntities context = new ProtoLibEntities())
            {
                var dalBooks = (from b in context.BookDetailsSet
                                orderby b.BookDetailsID
                                select b).Take(numItems);

                BookDetailsBLL bllBook = null;
                foreach (BookDetails dalBook in dalBooks)
                {
                    bllBook = new BookDetailsBLL();
                    CrossLayerEntityConverter.BookDetailsDalToBll(context, bllBook, dalBook);
                    retList.Add(bllBook);
                }
            }

            return retList;
        }
コード例 #9
0
        public BookDetailsBLL GetByID(int id)
        {
            using (ProtoLibEntities context = new ProtoLibEntities())
            {
                BookDetails book = (from b in context.BookDetailsSet
                                    where b.BookDetailsID == id
                                    select b).SingleOrDefault();

                if (book != null)
                {
                    BookDetailsBLL retBook = new BookDetailsBLL();
                    CrossLayerEntityConverter.BookDetailsDalToBll(context, retBook, book);
                    return retBook;
                }
            }

            return null;
        }