public ActionResult Create(CaveFileViewModel vm)
 {
     if (ModelState.IsValid)
     {
         db.Caves.Find(vm.CaveID).MetaFiles.Add(PopulateCaveFileFromVM(vm));
         db.SaveChanges();
         return RedirectToAction("edit", "Caves", new { id = vm.CaveID }).AddFragment("CaveFilesSection");
     }
     vm.FileTypeSelectList = new SelectList(db.FileTypes, "FileTypeID", "Description",vm.FileTypeID);
     return View(vm);
 }
        public ActionResult Create(int id)
        {
            if (id == 0)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            CaveFileViewModel vm = new CaveFileViewModel();
            vm.CaveID = id;
            vm.FileTypeSelectList = new SelectList(db.FileTypes, "FileTypeID", "Description");
            return View(vm);
        }
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            MetaFile caveFile = db.MetaFiles.Find(id);
            if (caveFile == null)
            {
                return HttpNotFound();
            }

            CaveFileViewModel vm = new CaveFileViewModel();
            //vm.CaveID = caveFile.CaveID;
            vm.FileID = caveFile.FileId;
            vm.Description = caveFile.Description;
            vm.FileTypeID = vm.FileTypeID;
            vm.FileTypeSelectList = new SelectList(db.FileTypes, "FileTypeID", "Description", caveFile.FileTypeId);
            return View(vm);
        }
 private void SetFileFromVM(File file, CaveFileViewModel vm)
 {
     if (vm.Data != null)
     {
         using (var memoryStream = new System.IO.MemoryStream())
         {
             vm.Data.InputStream.CopyTo(memoryStream);
             file.Data = memoryStream.ToArray();
         }
         file.FileName = vm.Data.FileName;
         file.MimeType = vm.Data.ContentType;
     }
 }
        private MetaFile PopulateCaveFileFromVM(CaveFileViewModel vm)
        {
            File file = new File();
            SetFileFromVM(file, vm);

            MetaFile caveFile = new MetaFile();
            caveFile.File = file;

            caveFile.FileType = db.FileTypes.Find(vm.FileTypeID);
            caveFile.FileTypeId = vm.FileTypeID;

            caveFile.Description = vm.Description;

            db.Caves.Find(vm.CaveID).MetaFiles.Add(caveFile);
            return caveFile;
        }
        public ActionResult Edit(CaveFileViewModel vm)
        {
            if (ModelState.IsValid)
            {
                MetaFile caveFile = db.MetaFiles.Find(vm.FileID);
                var file = db.Files.Find(vm.FileID);
                SetFileFromVM(file, vm);
                db.Entry(caveFile).State = System.Data.Entity.EntityState.Modified;
                if(vm.Data != null) db.Entry(file).State = System.Data.Entity.EntityState.Modified;

                //caveFile.Cave = db.Caves.Find(vm.CaveID);
                //caveFile.CaveID = vm.CaveID;

                caveFile.Description = vm.Description;

                caveFile.FileType = db.FileTypes.Find(vm.FileTypeID);
                caveFile.FileTypeId = vm.FileTypeID;

                db.SaveChanges();
                return RedirectToAction("edit", "Caves", new { id = vm.CaveID }).AddFragment("CaveFilesSection");
            }
            vm.FileTypeSelectList = new SelectList(db.FileTypes, "FileTypeID", "Description", vm.FileTypeID);
            return View(vm);
        }