public bool LoanBook(int ssn, int copyId) { using (var dbContextTransaction = _context.Database.BeginTransaction(IsolationLevel.Serializable)) { try { if (_loaningDa.MemberLoanBooks(ssn, _context) < _memberDa.GetMember(ssn, _context).MemberType.NrOfBooks && //member is allowed to Loan more _loaningDa.GetLoan(copyId, _context) == null && //not Loaned at the time _loaningDa.LoanBook(new Loan { SSN = ssn, CopyID = copyId, FromDate = DateTime.Now }, _context)) //loan successful { dbContextTransaction.Commit(); return(true); } dbContextTransaction.Rollback(); return(false); } catch { dbContextTransaction.Rollback(); return(false); } } }
public int GetAvailableCopyId(string isbn) { using (var dbContextTransaction = _context.Database.BeginTransaction(IsolationLevel.ReadUncommitted)) { try { var copies = _copyDa.GetAvailableCopyId(isbn, _context); int i = 0; if (copies.Count > 0) { while (!false) { if (_loaningDa.GetLoan(copies[i].CopyID, _context) == null) { dbContextTransaction.Commit(); return(copies[i].CopyID); } else { i++; } } } dbContextTransaction.Rollback(); return(0); } catch { dbContextTransaction.Rollback(); return(0); } } }
//todo wrong location private List <readAllMaterial> CountAvailableCopies(List <readAllMaterial> allMaterials, List <Copy> copies) { foreach (var readAllMaterial in allMaterials) { int count = 0; foreach (var copy in copies) { if (readAllMaterial.ISBN.Equals(copy.ISBN) && readAllMaterial.Location.Equals(copy.LibraryName) && readAllMaterial.TypeName.Equals(copy.TypeName) && (_loaningDa.GetLoan(copy.CopyID, _context) == null)) { count++; } } readAllMaterial.Available_Copies = count; } allMaterials = allMaterials.OrderByDescending(x => x.Available_Copies).ToList(); return(allMaterials); }