/// <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); } } } }
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); }