Я работаю с 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
Параметр композитного типа в PostgreSQL с использованием npgsql, ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как вставить массив композитного типа 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
-