Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

261
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda