/// <summary> /// Get Dictionary<UniqueID, ControlID> /// </summary> /// <param name="currentControl"></param> /// <param name="db"></param> /// <param name="transaction"></param> /// <returns></returns> private Dictionary <int, OperandInstance> GetUniqueIDControlIDDictionary(ControlInstance currentControl, WebBuilderEFContext db, DbContextTransaction transaction) { Dictionary <int, OperandInstance> dictionary = new Dictionary <int, OperandInstance>(); if (currentControl.Control.UniqueID > 0) { OperandInstance currentOperand = new OperandInstance() { ObjectID = currentControl.Control.ControlID, UniqueID = currentControl.Control.UniqueID, OperandID = currentControl.Control.OperandID.GetValueOrDefault() }; dictionary.Add(currentControl.Control.UniqueID, currentOperand); } if (currentControl.ChildControls != null) { foreach (ControlInstance childControl in currentControl.ChildControls) { { Dictionary <int, OperandInstance> subDictionary = GetUniqueIDControlIDDictionary(childControl, db, transaction); subDictionary.ToList().ForEach(x => dictionary.Add(x.Key, x.Value)); } } } return(dictionary); }
/// <summary> /// Add new form - Save all the form meta descriptions /// </summary> /// <param name="formInstance">Form meta-descriptions to save</param> /// <returns></returns> public FormInstance AddFormMetaDescriptions(FormInstance formInstance) { // Dictionary<UniqueID, ControlID> Dictionary <int, OperandInstance> uniqueIDDictionary = new Dictionary <int, OperandInstance>(); using (var db = this.CreateContext()) { using (var transaction = db.Database.BeginTransaction()) { try { // Save Form db.Forms.Add(formInstance.Form); db.SaveChanges(); // Save Form Parameters if (formInstance.FormParameters != null) { foreach (var formParameter in formInstance.FormParameters) { formParameter.FormParameter.FormID = formInstance.Form.FormID; var operand = db.Operands.Add(new Operand()); db.SaveChanges(); formParameter.FormParameter.OperandID = operand.OperandID; db.FormParameters.Add(formParameter.FormParameter); db.SaveChanges(); OperandInstance currentOperand = new OperandInstance() { ObjectID = formParameter.FormParameter.FormParameterID, UniqueID = formParameter.FormParameter.UniqueID, OperandID = formParameter.FormParameter.OperandID }; uniqueIDDictionary.Add(formParameter.FormParameter.UniqueID, currentOperand); } } // Recursive save all the controls of the form formInstance.RootControl.Control.FormID = formInstance.Form.FormID; this.SaveControl(formInstance.RootControl, db, transaction); // Dictionary<UniqueID, ControlID> Dictionary <int, OperandInstance> controlIDuniqueIDDictionary = GetUniqueIDControlIDDictionary(formInstance.RootControl, db, transaction); controlIDuniqueIDDictionary.ToList().ForEach(x => uniqueIDDictionary.Add(x.Key, x.Value)); // Recursive save all events this.SaveControlEvents(controlIDuniqueIDDictionary, formInstance.RootControl, db, transaction); // Commit transaction db.SaveChanges(); transaction.Commit(); return(formInstance); } catch (Exception) { transaction.Rollback(); throw; } } } }