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; } }
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); }
/// <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); }
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; }
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; }
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; }
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; }
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; }
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; }