Пример #1
0
        public static async Task <ICollection <T> > QueryAsync <T>(this DataTable table)
            where T : class, new()
        {
            var result = new List <T>();
            var mapper = EntityMapper.GetTableMapper <T>(table);
            var reader = table.CreateDataReader();

            while (await reader.ReadAsync())
            {
                var entity = new T();
                foreach (var columnName in mapper.ColumnMaps.Keys)
                {
                    var value = reader[columnName];
                    if (value is DBNull)
                    {
                        continue;
                    }
                    mapper.ColumnMaps[columnName].Set(entity, value);
                }

                result.Add(entity);
            }

            return(result);
        }
Пример #2
0
        public static Dictionary <uint, TypeEntity> Load(NpgsqlConnection connection)
        {
            var dataTable  = connection.GetSchema("DataTypes");
            var mapper     = EntityMapper.GetTableMapper <TypeEntity>(dataTable);
            var dataReader = dataTable.CreateDataReader();
            var types      = new Dictionary <uint, TypeEntity>();
            var systemCollectionsAssembly           = typeof(System.Collections.BitArray).Assembly;
            var systemNetAssembly                   = typeof(IPAddress).Assembly;
            var systemNetNetworkInformationAssembly = typeof(PhysicalAddress).Assembly;
            var npgsqlAssembly             = typeof(NpgsqlBox).Assembly;
            var newtonsoftJsonLinqAssembly = typeof(JObject).Assembly;

            while (dataReader.Read())
            {
                var type = new TypeEntity();
                foreach (var columnName in mapper.ColumnMaps.Keys)
                {
                    var value = dataReader[columnName];
                    if (value is DBNull)
                    {
                        continue;
                    }
                    mapper.ColumnMaps[columnName].Set(type, value);
                }

                if ((type.TypeName == "OID" || type.TypeName == "xid" || type.TypeName == "cid" || type.TypeName == "tid") && string.IsNullOrEmpty(type.DataType))
                {
                    type.DataType   = "System.UInt32";
                    type.IsUnsigned = true;
                }

                if (type.DataType == "String")
                {
                    type.DataType = "System.String";
                }
                else if (type.DataType == "System.Text.Json.JsonDocument")
                {
                    type.DataType = "Newtonsoft.Json.Linq.JObject";
                }
                else if (type.DataType == "System.Text.Json.JsonDocument[]")
                {
                    type.DataType = "Newtonsoft.Json.Linq.JArray";
                }

                if (!string.IsNullOrEmpty(type.DataType))
                {
                    type.Type = Type.GetType(type.DataType);
                    if (type.Type == null)
                    {
                        if (type.DataType.Contains("NpgsqlRange"))
                        {
                            var match = Regex.Match(type.DataType, @"\[[^\.]+\.([A-Za-z0-9]+)");
                            type.DataType = $"NpgsqlRange<{match.Groups[1].Value}>";
                            type.Type     = npgsqlAssembly.GetType(type.DataType);
                            type.Using    = "NpgsqlTypes";
                        }
                        else if (type.DataType.StartsWith("Npgsql"))
                        {
                            type.Type  = npgsqlAssembly.GetType(type.DataType);
                            type.Using = "NpgsqlTypes";
                        }
                        else if (type.DataType.StartsWith("System.Collections"))
                        {
                            type.Type  = systemCollectionsAssembly.GetType(type.DataType);
                            type.Using = "System.Collections";
                        }
                        else if (type.DataType.StartsWith("System.Net.NetworkInformation"))
                        {
                            type.Type  = systemNetNetworkInformationAssembly.GetType(type.DataType);
                            type.Using = "System.Net.NetworkInformation";
                        }
                        else if (type.DataType.StartsWith("System.Net"))
                        {
                            type.Type  = systemNetAssembly.GetType(type.DataType);
                            type.Using = "System.Net";
                        }
                        else if (type.DataType.StartsWith("Newtonsoft.Json.Linq"))
                        {
                            type.Type  = newtonsoftJsonLinqAssembly.GetType(type.DataType);
                            type.Using = "Newtonsoft.Json.Linq";
                        }
                    }
                }

                types[type.OID] = type;
            }

            return(types);
        }