/// <summary> /// Retorna o conjunto de parâmetros da procedure com os respectivos valores /// </summary> /// <param name="procudureMapKey">Chave do Mapa da procedure</param> /// <param name="fieldParameters">Dicionários de campos e valores</param> /// <returns>Dicionários de parâmetros e valores</returns> public List <ProcedureParameter> GetProcedureParameters(string procudureMapKey, Dictionary <string, object> fieldParameters) { //TODO:Tratar exceções List <ProcedureParameter> procedureParameters = new List <ProcedureParameter>(); ProcedureMapInfo procedureMap = GetProcedureMap(procudureMapKey); foreach (string field in procedureMap.Parameters.Keys) { ProcedureParameter parameter = procedureMap.Parameters[field]; if ((fieldParameters != null && fieldParameters.ContainsKey(field)) || parameter.DefaultValue != null || parameter.Direction != ParameterDirection.Input) { ProcedureParameter newParameter = new ProcedureParameter() { Name = parameter.Name, DataType = parameter.DataType, Value = parameter.DefaultValue, Direction = parameter.Direction, Size = parameter.Size }; if (fieldParameters != null && fieldParameters.ContainsKey(field) && fieldParameters[field] != null) { if (fieldParameters[field].GetType() != typeof(DateTime) || Convert.ToDateTime(fieldParameters[field]) != DateTime.MinValue) { newParameter.Value = fieldParameters[field]; } } procedureParameters.Add(newParameter); } } return(procedureParameters); }
private static ModelMap LoadModelXml(Type type) { try { Config.Settings essentialsSettings = (Config.Settings)ConfigurationManager.GetSection("essentialsSettings"); XmlDocument xml = new XmlDocument(); xml.Load(essentialsSettings.XmlModelsPath); XmlNode modelNode = xml.SelectSingleNode("/Models/Model[@type='" + type.FullName + "']"); modelNode = (modelNode == null) ? xml.SelectSingleNode("/Models/Model[@baseModelType='" + type.FullName + "']") : modelNode; if (modelNode != null) { ModelMap modelMap = new ModelMap(table: modelNode.Attributes["table"].Value); if (modelNode.Attributes["dataBaseName"] != null) { modelMap._databaseName = modelNode.Attributes["dataBaseName"].Value; } if (modelNode.Attributes["inheritanceMode"] != null && modelNode.Attributes["inheritanceMode"].Value == "JoinTables") { modelMap.InheritanceMode = DataAnnotations.ERBridge.InheritanceMode.JoinTables; modelMap.ParentTableReferenceColumn = modelNode.Attributes["parentTableReferenceColumn"].Value; } //Colunas foreach (XmlNode columnNode in modelNode.SelectNodes("ColumnMap")) { if (type.GetProperty(columnNode.Attributes["property"].Value) != null) { ColumnMap columnMap = new ColumnMap( property: columnNode.Attributes["property"].Value, column: columnNode.Attributes["column"].Value, dataType: (DataAnnotations.ERBridge.DataType)Enum.Parse(typeof(DataAnnotations.ERBridge.DataType), columnNode.Attributes["dbType"].Value), isAutoIncremented: (columnNode.Attributes["isAutoIncremented"] != null ? bool.Parse(columnNode.Attributes["isAutoIncremented"].Value) : false), sequenceName: (columnNode.Attributes["sequenceName"] != null ? columnNode.Attributes["sequenceName"].Value : null), isRequired: (columnNode.Attributes["isRequired"] != null ? bool.Parse(columnNode.Attributes["isRequired"].Value) : false), isKey: (columnNode.Attributes["isKey"] != null ? bool.Parse(columnNode.Attributes["isKey"].Value) : false), isReference: (columnNode.Attributes["isReference"] != null ? bool.Parse(columnNode.Attributes["isReference"].Value) : false)); modelMap.ColumnsMap.Add(columnMap.Property, columnMap); if (columnMap.IsKey) { modelMap.Keys.Add(columnMap.Property); } //Referências if (columnMap.IsReference) { XmlNode referenceNode = modelNode.SelectSingleNode("ReferenceMap[@property='" + columnMap.Property + "']"); ReferenceMapInfo referenceMap = new ReferenceMapInfo( property: referenceNode.Attributes["property"].Value, referenceKey: referenceNode.Attributes["referenceKey"].Value, fetchType: columnNode.Attributes["fetchType"] != null ? (DataAnnotations.ERBridge.Fetch)Enum.Parse(typeof(DataAnnotations.ERBridge.Fetch), columnNode.Attributes["fetchType"].Value) : DataAnnotations.ERBridge.Fetch.LAZY, referencedModelType: type.GetProperty(referenceNode.Attributes["property"].Value).PropertyType ); modelMap.ReferencesMap.Add(referenceMap.Property, referenceMap); modelMap.ColumnsMap.Add(columnMap.Property + "." + referenceMap.ReferenceKey, columnMap); modelMap.Columns.Add(columnMap.Column, columnMap.Property + "." + referenceMap.ReferenceKey); } else { modelMap.Columns.Add(columnMap.Column, columnMap.Property); } } } //Coleções foreach (XmlNode collectionNode in modelNode.SelectNodes("ColletionReferenceMap")) { if (type.GetProperty(collectionNode.Attributes["property"].Value) != null) { System.Reflection.PropertyInfo property = type.GetProperty(collectionNode.Attributes["property"].Value); Type itemType = (property.PropertyType.IsGenericType) ? property.PropertyType.GetGenericArguments()[0] : null; if (itemType != null) { CollectionReferenceMapInfo collectionMap = new CollectionReferenceMapInfo( property: property.Name, collectionItemType: itemType, itemReferenceKey: collectionNode.Attributes["itemReferenceKey"].Value, collectionFetchType: collectionNode.Attributes["fetchType"] != null ? (DataAnnotations.ERBridge.Fetch)Enum.Parse(typeof(DataAnnotations.ERBridge.Fetch), collectionNode.Attributes["fetchType"].Value) : DataAnnotations.ERBridge.Fetch.LAZY, associationTableName: (collectionNode.Attributes["associationTable"] != null ? collectionNode.Attributes["associationTable"].Value : null), mainColumnKey: (collectionNode.Attributes["mainColumnKey"] != null ? collectionNode.Attributes["mainColumnKey"].Value : null), secundaryColumnKey: (collectionNode.Attributes["secundaryColumnKey"] != null ? collectionNode.Attributes["secundaryColumnKey"].Value : null) ); modelMap.CollectionsReferencesMap.Add(property.Name, collectionMap); } } } //Procedures foreach (XmlNode procedureNode in modelNode.SelectNodes("ProcedureMap")) { ProcedureMapInfo procedureMap = new ProcedureMapInfo(procedureNode.Attributes["name"].Value); foreach (XmlNode parameterNode in procedureNode.SelectNodes("Parameter")) { ProcedureParameter parameter = new ProcedureParameter(); parameter.Name = parameterNode.Attributes["name"].Value; parameter.DataType = (DataAnnotations.ERBridge.DataType)Enum.Parse(typeof(DataAnnotations.ERBridge.DataType), parameterNode.Attributes["dbType"].Value); parameter.DefaultValue = parameterNode.Attributes["defaultValue"] != null ? parameterNode.Attributes["defaultValue"].Value : null; parameter.Direction = parameterNode.Attributes["direction"] != null ? (ParameterDirection)Enum.Parse(typeof(ParameterDirection), parameterNode.Attributes["direction"].Value): ParameterDirection.Input; parameter.Size = parameterNode.Attributes["size"] != null?int.Parse(parameterNode.Attributes["size"].Value) : 0; procedureMap.Parameters.Add(parameterNode.Attributes["field"].Value, parameter); } modelMap.ProceduresMap.Add(procedureNode.Attributes["procedureKey"].Value, procedureMap); } return(modelMap); } } catch (Exception ex) { Console.Write(ex); } return(null); }