HanaDecimal не имеет сериализуемого атрибута - PullRequest
1 голос
/ 14 октября 2019

Я пытаюсь использовать Dapper с провайдером Hana (провайдер HANA .Net Core 2.1 ADO.NET, ср. Поддержка Microsoft .NET Core в библиотеке SAP "Справочник по программированию клиентского интерфейса SAP HANA для платформы SAP HANA"). Все нормально работает со случайным DataReader, но возникает проблема, когда я пытаюсь использовать некоторый класс сущностей, который содержит десятичный тип с Dapper:

public class SomeType 
{
    public string Text { get; set; }
    public decimal Value { get; set; }
}

var resultSet = hanaConnection.Query<SomeType>("some hana sql");

К сожалению, выдается следующее исключение:

Тип 'Sap.Data.Hana.HanaDecimal' в сборке 'Sap.Data.Hana.Core.v2.1, версия = 2.4.151.0, Culture = нейтральный, PublicKeyToken = 0326b8ea63db4bc4' не помечен как сериализуемый.

Я попытался создать собственный обработчик типа для decimal, не повезло:

public class DecimalTypeHandler : SqlMapper.TypeHandler<decimal>
{
    public override decimal Parse(object value)
    {
        return Convert.ToDecimal(value);
    }

    public override void SetValue(IDbDataParameter parameter, decimal value)
    {
        parameter.Value = value;
    }
}

Mapper даже не вызывается, поэтому я предполагаю, что при извлечении данных выдается ошибкаиз БД

Есть ли обходной путь, поскольку я не могу добавить атрибут Serializable в проприетарную сборку с закрытым исходным кодом?

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Благодаря Марку Гравеллу, который руководил мной для просмотра трассировки стека, оказалось, что сериализация была добавлена ​​кем-то другим, и она не имеет ничего общего с dapper.

Каждый работает, используя DecimalTypeHandler, представленный внутри вопроса.

0 голосов
/ 14 октября 2019

Добавить обработчик типа перед запросом:

 SqlMapper.AddTypeHandler(new DecimalTypeHandler ());
 var resultSet = hanaConnection.Query<SomeType>("some hana sql");
...