//норм, но можно было 1: разделить Add и Update - с точки зрения бизнес логики это разные процессы
 //2 - смотри класс BicycleRepository
 public void SaveBicycle(Bicycle bicycle)
 {
     if (bicycle.BicycleId == 0)
     {
         context.Bicycles.Add(bicycle);
         context.SaveChanges();
         context.BicyclesInStocks.Add(
             new BicyclesInStock { BicycleId = bicycle.BicycleId, RentCenterId = bicycle.RentCenterId}    
         );           
     }
     else
     {
         Bicycle dbEntry = context.Bicycles.Find(bicycle.BicycleId);
         if (dbEntry != null)
         {
             dbEntry.Model = bicycle.Model;
             dbEntry.Description = bicycle.Description;
             dbEntry.RentPrice = bicycle.RentPrice;
             dbEntry.RentCenterId = bicycle.RentCenterId;
             dbEntry.ImageData = bicycle.ImageData;
             dbEntry.ImageMimeType = bicycle.ImageMimeType;
         }
     }
     context.SaveChanges();
 }
        public void TakeOnRent(Bicycle bicycle)
        {
            BicyclesInStock dbEntry = context.BicyclesInStocks.Find(bicycle.BicycleId, bicycle.RentCenterId);
            if (dbEntry != null)
            {
                HistoryRent history = AddHistory(dbEntry);

                BicyclesOnRent bicycleOnRent = new BicyclesOnRent { BicycleId = history.BicycleID, RentCenterId = history.RentIdOut,
                    DateTimeOut = history.DateTimeOut, HistoryRentID = history.HistoryRentID
                };
                context.BicyclesOnRents.Add(bicycleOnRent);

                context.BicyclesInStocks.Remove(dbEntry);
            }            
            context.SaveChanges();
        }
 public ActionResult Edit(Bicycle bicycle, HttpPostedFileBase image)
 {
     if (ModelState.IsValid)
     {
         if (image != null)
         {
             bicycle.ImageMimeType = image.ContentType;
             bicycle.ImageData = new byte[image.ContentLength];
             image.InputStream.Read(bicycle.ImageData, 0, image.ContentLength);
         }
         repository.SaveBicycle(bicycle);
         TempData["message"] = string.Format("Модель велосипеда {0} удачно сохранена в базе данных", bicycle.Model);
         return RedirectToAction("Index");
     }
     else
     {
         return View(bicycle);
     }
 }
 public ActionResult BackRent(Bicycle bicycle)
 {
     repository.BackRent(bicycle, UserRentId);
     return RedirectToAction("Index", new { UserRentId });
 }
 public ActionResult TakeOnRent(Bicycle bicycle)
 {
     repository.TakeOnRent(bicycle);
     return RedirectToAction("Index", new { UserRentId });
 }
 public void BackRent(Bicycle bicycle, int userRentId)
 {
     BicyclesOnRent bicycleOnRent = context.BicyclesOnRents.Find(bicycle.BicycleId, bicycle.RentCenterId);
     if(bicycleOnRent != null)
     {
         BicyclesInStock bicycleInStock = new BicyclesInStock { BicycleId = bicycleOnRent.BicycleId,
                                                                 RentCenterId = userRentId
         };
         context.BicyclesInStocks.Add(bicycleInStock);
         HistoryRent dbEntry = context.HistoryRents.Find(bicycleOnRent.HistoryRentID);
         if(dbEntry != null)
         {
             dbEntry.DateTimeIn = DateTime.Now;
             dbEntry.RentIdIn = bicycleInStock.RentCenterId;
             dbEntry.DeltaTime = (dbEntry.DateTimeIn - dbEntry.DateTimeOut).Value.Seconds;
             context.BicyclesOnRents.Remove(bicycleOnRent);
         }
         Bicycle bicycledbEntry = context.Bicycles.Find(bicycle.BicycleId);
         if(bicycledbEntry != null)
         {
             bicycledbEntry.RentCenterId = bicycleInStock.RentCenterId;
         }
     }
     context.SaveChanges();
 }