Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }