Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

267
Vistas
¿Cómo crear un mapeo de tipos para el tipo de rango Postgresql personalizado?

Uso Dapper y PostgreSQL en mi proyecto. Y tengo algunas enumeraciones personalizadas, compuestos y tipos de rango en mi esquema, por ejemplo:

 create type timerange as range ( subtype = time, subtype_diff = time_subtype_diff );

Y uso este rango en la tabla myproject.working_time_intervals, que está conectado con la clase modelo WorkingInterval:

 create table working_time_intervals ( id serial not null constraint working_time_intervals_pk primary key, day_of_week myproject.day_of_week not null, begin_end_range myproject.timerange );
 public class WorkingInterval { public int Id { get; set; } public DayOfWeek DayOfWeek { get; set; } public NpgsqlRange<TimeSpan> BeginEndRange { get; set; } }

Además, cuando trato de usar esta clase e insertar datos en db y obtener resultados, obtengo una excepción

 var result = await connection.QueryAsync<WorkingInterval>( @"insert into myproject.working_time_intervals(day_of_week, begin_end_range) select unnest(@DayOfWeeks), myproject.timerange(unnest(@Begins)::time, unnest(@Ends)::time, '[]') returning *", new { DayOfWeeks = intervals.Select(i => i.DayOfWeek).ToArray(), Begins = intervals.Select(i => i.Begin).ToArray(), Ends = intervals.Select(i => i.End).ToArray() });
 System.NotSupportedException: The CLR array type NpgsqlTypes.NpgsqlRange`1[System.TimeSpan][] isn't supported by Npgsql or your PostgreSQL. If you wish to map it to an PostgreSQL composite type array you need to register it before usage, please refer to the documentation.\r\n at Npgsql.TypeMapping.ConnectorTypeMapper.GetByClrType(Type type)\r\n at Npgsql.

¿Cómo puedo crear un mapeo para el rango de tiempo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El problema aquí es que .NET TimeSpan no está asignado de manera predeterminada al time de PostgreSQL; está asignado al interval ( consulte la tabla de documentos sobre asignaciones ); esto significa que NpgsqlRange<TimeSpan> tampoco se asigna a su timerange de tiempo de PostgreSQL de forma predeterminada.

Todavía es posible que todo esto funcione, pero debe decirle a Npgsql explícitamente qué tipo enviar. Sin usar Dapper, lo siguiente debería funcionar bien:

 cmd = new NpgsqlCommand(@"INSERT INTO foo (range) VALUES (@range)", conn); cmd.Parameters.AddWithValue("range", NpgsqlDbType.Range | NpgsqlDbType.Time, new NpgsqlRange<TimeSpan>(TimeSpan.FromHours(1), TimeSpan.FromHours(2))); cmd.ExecuteNonQuery(); cmd = new NpgsqlCommand(@"INSERT INTO foo (ranges) VALUES (@ranges)", conn); cmd.Parameters.AddWithValue("ranges", NpgsqlDbType.Range | NpgsqlDbType.Array | NpgsqlDbType.Time, new[] { new NpgsqlRange<TimeSpan>(TimeSpan.FromHours(1), TimeSpan.FromHours(2)), new NpgsqlRange<TimeSpan>(TimeSpan.FromHours(3), TimeSpan.FromHours(4)) }); cmd.ExecuteNonQuery();

Con Dapper, necesitará un poco de personalización para configurar NpgsqlDbType,esta pregunta debería ayudar .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda