コード例 #1
0
ファイル: ModelMaps.cs プロジェクト: viniciuscs84/Marvin
        public string GetMappedPropertyName(string column)
        {
            string mappedPropertyName = GetPropertyName(column);

            if (string.IsNullOrEmpty(mappedPropertyName))
            {
                string[] columnParts = column.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
                if (columnParts.Length > 1)
                {
                    foreach (ReferenceMapInfo reference in GetReferencesMapList())
                    {
                        ModelMap referenceModelMap = ModelMap.GetModelMap(reference.ReferencedModelType);
                        if (referenceModelMap != null && (referenceModelMap.Table == columnParts[0] || columnParts[0] == reference.Property))
                        {
                            mappedPropertyName  = reference.Property;
                            mappedPropertyName += "." + referenceModelMap.GetMappedPropertyName(column.Remove(0, (columnParts[0] + ".").Length));
                            break;
                        }
                    }
                }
            }
            return(mappedPropertyName);
        }
コード例 #2
0
        /// <summary>
        /// Retorna um objeto da entidade montada a partir de um DataReader e do seu mapeamento
        /// </summary>
        /// <param name="dr">DataReader</param>
        /// <param name="modelType">Tipo da entidade</param>
        /// <returns>Objeto da entidade</returns>
        public TModel GetModelObjectByDataReader <TModel>(IDataReader dr, Type modelType = null)
            where TModel : class, Layers.IModel
        {
            if (modelType == null)
            {
                modelType = typeof(TModel);
            }
            //TODO:Tratar exceções
            TModel result = default(TModel);

            ModelMaps.ModelMap modelMap = ModelMaps.ModelMap.GetModelMap(modelType);
            if (modelMap != null)
            {
                XmlDocument docXml = new XmlDocument();
                docXml.AppendChild(docXml.CreateXmlDeclaration("1.0", null, null));
                XmlElement root = docXml.CreateElement(modelType.GetTypeName());
                docXml.AppendChild(root);
                bool isNullRow = true;
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    string propertyName = modelMap.GetMappedPropertyName(dr.GetName(i));
                    if (!string.IsNullOrEmpty(propertyName) && dr.GetValue(i) != DBNull.Value)
                    {
                        isNullRow = false;
                        XmlNode nodeToAppend = root;
                        string  mappedNode   = propertyName;

                        foreach (string nodeName in mappedNode.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries))
                        {
                            if (nodeToAppend.SelectSingleNode(nodeName) != null)
                            {
                                nodeToAppend = nodeToAppend.SelectSingleNode(nodeName);
                            }
                            else
                            {
                                nodeToAppend.AppendChild(docXml.CreateElement(nodeName));
                                nodeToAppend = nodeToAppend.LastChild;
                            }
                        }
                        string val = dr[i].ToString();
                        double num;
                        if (double.TryParse(val.ToString(), out num) && dr[i].GetType() != typeof(string))
                        {
                            val = num.ToString(System.Globalization.CultureInfo.InvariantCulture);
                        }
                        else if (dr[i].GetType() == typeof(DateTime))
                        {
                            val = dr.GetDateTime(i).ToString("yyyy-MM-ddTHH:mm:ss");
                        }
                        else if (dr[i].GetType() == typeof(bool))
                        {
                            val = val.ToLower();
                        }
                        else if (dr[i].GetType() == typeof(byte[]))
                        {
                            val = Commons.Utilities.ClassToXML.SerealizeBytes((dr[i] as Byte[]));
                        }
                        if (modelMap.GetMappedColumnMap(propertyName).DataType == DataAnnotations.ERBridge.DataType.Xml)
                        {
                            try
                            {
                                nodeToAppend.InnerXml = val;
                            }
                            catch
                            {
                                nodeToAppend.InnerText = val;
                            }
                        }
                        else
                        {
                            nodeToAppend.InnerText = val;
                        }
                    }
                }
                if (!isNullRow)
                {
                    result = (TModel)Commons.Utilities.ClassToXML.DeserializeXML(docXml.InnerXml, modelType);
                }
                result.IsReady = true;
            }
            return(result);
        }