Параметр композитного типа в PostgreSQL с использованием npgsql,C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Параметр композитного типа в PostgreSQL с использованием npgsql,

Сообщение Anonymous »

Я работаю с npgsql, и у меня есть несколько таблиц в PostgreSQL с составным типом данных: < /p>
create type datetimeoffset as
(
"DateTimeUtc" timestamp without time zone,
"Offset" smallint
);
< /code>
, чтобы представить этот тип данных, я имею следующий класс: < /p>
public class PgDateTimeOffset
{
public PgDateTimeOffset(DateTime dateTimeUtc, short offset)
{
DateTimeUtc = DateTime.SpecifyKind(dateTimeUtc, DateTimeKind.Utc);
Offset = offset;
}

public DateTime DateTimeUtc { get; set; }
public short Offset { get; set; }
}
< /code>
Допустим, у меня есть таблица: < /p>
create table mytable
(
Id int not null generated always as identity,
Timestamp datetimeoffset
);
< /code>
И у меня есть код для написания этой таблицы: < /p>
public void Insert(PgDateTimeOffset timestamp)
{
Connection.Execute("INSERT INTO mytable (Timestamp) VALUES (@timestamp)", new { timestamp });
}
< /code>
Я также создал обработчик типа: < /p>
public class DapperDateTimeOffsetTypeHandler: SqlMapper.TypeHandler
{
public override void SetValue(IDbDataParameter parameter, DateTimeOffset value)
{
// When sending data, create an instance of DateTimeOffsetPg
parameter.Value = (PgDateTimeOffset)value;
}

public override DateTimeOffset Parse(object value)
{
// When reading data, cast the object to DateTimeOffsetPg
if (value is PgDateTimeOffset composite)
{
return composite;
}
if(value is DateTimeOffset dto)
{
return dto;
}
if (value is DateTime dt)
{
return dt;
}
throw new DataException("Unexpected type when converting to DateTimeOffset.");
}
}
< /code>
И я регистрирую обработчик типа: < /p>
SqlMapper.AddTypeHandler(new DapperDateTimeOffsetTypeHandler());
< /code>
и составной тип зарегистрирован: < /p>
var dataSourceBuilder = new NpgsqlDataSourceBuilder(connectionString);
dataSourceBuilder.MapComposite
("datetimeoffset");
var dataSource = dataSourceBuilder.Build();
< /code>
Проблема в том, что я продолжаю получать это исключение: < /p>
System.NotSupportedException
HResult=0x80131515
Message=The member timestamp of type Neurologistica.Data.Repositories.PostgreSql.PgDateTimeOffset cannot be used as a parameter value
Source=Dapper
StackTrace:
< /code>
Есть идея? Чего мне не хватает?


Подробнее здесь: https://stackoverflow.com/questions/794 ... ing-npgsql
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Параметр композитного типа в PostgreSQL с использованием npgsql,
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Параметр композитного типа в PostgreSQL с использованием npgsql,
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как вставить массив композитного типа PostgreSQL с помощью JDBCClient Springboot
    Anonymous » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • При переходе на Npgsql, есть ли различия в запросах Linq для SQL Server и Npgsql? [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Некоторые таблицы PostgreSQL недоступны из приложения, использующего Npgsql, C#/ASP.NET.
    Anonymous » » в форуме C#
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»