Esempio n. 1
0
        public string GetColumnName(string propertyName)
        {
            ColumnMap columnMap = GetColumnMap(propertyName);

            if (columnMap != null)
            {
                return(columnMap.Column);
            }
            return(null);
        }
Esempio n. 2
0
        /// <summary>
        /// Preenche o mapeamentos das colunas da entidade
        /// </summary>
        /// <param name="type">Tipo da entidade</param>
        /// <param name="modelMap">Mapeamento da entidade</param>
        public static void FillColumnMap(Type type, ModelMap modelMap)
        {
            foreach (System.Reflection.PropertyInfo property in type.GetProperties())
            {
                object[] att = property.GetCustomAttributes(typeof(DataAnnotations.ERBridge.Column), true);
                DataAnnotations.ERBridge.Column columnAtt = (att != null && att.Length > 0) ? (DataAnnotations.ERBridge.Column)att[0] : null;

                att = property.GetCustomAttributes(typeof(DataAnnotations.ERBridge.Reference), true);
                DataAnnotations.ERBridge.Reference referenceAtt = (att != null && att.Length > 0) ? (DataAnnotations.ERBridge.Reference)att[0] : null;

                att = property.GetCustomAttributes(typeof(DataAnnotations.ERBridge.CollectionReference), true);
                DataAnnotations.ERBridge.CollectionReference collectionAtt = (att != null && att.Length > 0) ? (DataAnnotations.ERBridge.CollectionReference)att[0] : null;

                att = property.GetCustomAttributes(typeof(KeyAttribute), true);
                KeyAttribute keyAtt = (att != null && att.Length > 0) ? (KeyAttribute)att[0] : null;

                if (columnAtt != null)
                {
                    ColumnMap columnMap = new ColumnMap(property.Name, columnAtt.Name, columnAtt.DataType, columnAtt.AutoIncremented, columnAtt.SequenceName, columnAtt.Required, (keyAtt != null), (referenceAtt != null), columnAtt.Length, columnAtt.Precision);
                    modelMap.ColumnsMap.Add(columnMap.Property, columnMap);

                    if (columnMap.IsReference)
                    {
                        ReferenceMapInfo referenceMap = new ReferenceMapInfo(property.Name, property.PropertyType, referenceAtt.ReferenceKey, referenceAtt.FetchType);
                        modelMap.ReferencesMap.Add(referenceMap.Property, referenceMap);
                        modelMap.Columns.Add(columnMap.Column, columnMap.Property + "." + referenceMap.ReferenceKey);
                        modelMap.ColumnsMap.Add(columnMap.Property + "." + referenceMap.ReferenceKey, columnMap);
                        if (columnMap.IsKey)
                        {
                            modelMap.Keys.Add(columnMap.Property + "." + referenceMap.ReferenceKey);
                        }
                    }
                    else
                    {
                        modelMap.Columns.Add(columnMap.Column, columnMap.Property);
                        if (columnMap.IsKey)
                        {
                            modelMap.Keys.Add(columnMap.Property);
                        }
                    }
                }

                if (collectionAtt != null)
                {
                    Type itemType = (property.PropertyType.IsGenericType) ? property.PropertyType.GetGenericArguments()[0] : null;
                    if (itemType != null)
                    {
                        CollectionReferenceMapInfo collectionMap = new CollectionReferenceMapInfo(property.Name, itemType, collectionAtt.ItemReferenceKey, collectionAtt.FetchType, collectionAtt.AssociationTableName, collectionAtt.MainColumnKey, collectionAtt.SecundaryColumnKey);
                        modelMap.CollectionsReferencesMap.Add(property.Name, collectionMap);
                    }
                }
            }
        }
Esempio n. 3
0
        public ColumnMap GetMappedColumnMap(string propertyName)
        {
            ColumnMap mappedColumnMap = GetColumnMap(propertyName);

            if (mappedColumnMap == null)
            {
                string[] propertyParts = propertyName.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
                if (propertyParts.Length > 1)
                {
                    ReferenceMapInfo reference = GetReferencesMapList().FirstOrDefault(r => r.Property == propertyParts[0]);
                    if (reference != null)
                    {
                        ModelMap referenceModelMap = ModelMap.GetModelMap(reference.ReferencedModelType);
                        if (referenceModelMap != null)
                        {
                            mappedColumnMap = referenceModelMap.GetColumnMap(propertyName.Remove(0, (propertyParts[0] + ".").Length));
                        }
                    }
                }
            }
            return(mappedColumnMap);
        }
Esempio n. 4
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);
        }