public ActionResult Create([Bind(Include = "LayerId,Columns")] CreateSchemaViewModel model) { try { if (ModelState.IsValid) { using (var access = new DataAccess()) { Layer layer = access.Layers.Get(l => l.Id == model.LayerId, includeProperties: "Map").SingleOrDefault(); if (layer == null) { logger.ErrorFormat("NOT_FOUND -- Layer with id={0} not found.", model.LayerId); ModelState.AddModelError("", Error.NOT_FOUND); } else if (layer.Map.User.Id != User.Identity.GetUser().Id) { logger.ErrorFormat("FORBIDDEN -- User with id={0} cannot access layer with id={1}.", User.Identity.GetUser().Id, layer.Id); ModelState.AddModelError("", Error.FORBIDDEN); } else { IList <string> messages = new List <string>(); if (!SchemaUtils.CheckColumns(model.Columns, ref messages)) { logger.InfoFormat("UserId={0} -- check columns failed", User.Identity.GetUser().Id); foreach (var message in messages) { logger.InfoFormat("UserId={0} -- message={1}", User.Identity.GetUser().Id, message); ModelState.AddModelError("", message); } } else { IList <Column> columns = new List <Column>(); foreach (var column in model.Columns) { columns.Add(new Column() { Id = Guid.NewGuid(), DataType = column.DataType, Name = column.Name, Layer = layer, HasChart = column.HasChart }); } access.Columns.BulkInsert(columns); layer.HasColumns = true; access.Layers.Update(layer); access.Save(); return(PartialView("../Layer/LoadData", new LoadDataViewModel(layer.Id))); } } } } else { logger.ErrorFormat("UserId={0} -- Model state is invalid", User.Identity.GetUser().Id); } } catch (Exception ex) { logger.Fatal("", ex); ModelState.AddModelError("", Error.ERROR); } return(PartialView(model)); }