Моя цель - создать собственную структуру с двойным переносом и сохранить ее в базе данных с помощью Dapper.К сожалению, я столкнулся с проблемой, которую не могу исправить.
Я создал следующую структуру:
public struct MyDouble
{
private readonly double value;
public static implicit operator MyDouble(double val)
{
return new MyDouble(val);
}
public static explicit operator double(MyDouble val)
{
return val.value;
}
public static explicit operator MyDouble(int val)
{
return new MyDouble(val);
}
public MyDouble(double val)
{
this.value = Process(val);
}
public double GetDouble()
{
return this.value;
}
}
и добавил обработчик пользовательского типа, как описано здесь (https://medium.com/dapper-net/custom-type-handling-4b447b97c620)
public class MyDoubleTypeHandler : SqlMapper.TypeHandler<MyDouble>
{
public override MyDouble Parse(object value)
{
return (MyDouble)value;
}
public override void SetValue(IDbDataParameter parameter, MyDouble value)
{
parameter.DbType = DbType.Double;
parameter.Value = value.GetDouble();
}
}
Мои пользовательские объекты с MyDouble
prop внутри:
public class MyObject
{
public MyDouble Prop1 { get; set; }
}
И метод сохранения выглядит так:
public async Task<bool> Save(List<MyObject> data)
{
SqlMapper.ResetTypeHandlers();
SqlMapper.AddTypeHandler(new MyDoubleTypeHandler());
parameters.AddTable("@Data", "dbo.MyObject", data.AsList());
using (var connection = new SqlConnection(connectionString))
{
await connection.OpenAsync();
return await connection.ExecuteAsync("name-of-sp", parameters, commandType: CommandType.StoredProcedure);
}
}
В результате я получаю эту ошибку: "System.ArgumentException: тип столбца «Prop1» не поддерживается. Тип «MyDouble» ».
Кажется, что мой обработчик пользовательского типа не был зарегистрирован, несмотря на то, что я делаю это напрямуюпозвонив по номеру SqlMapper.AddTypeHandler(new MyDoubleTypeHandler());
Может ли кто-нибудь помочь с этой проблемой?
PS Я использую Dapper 1.50.5, Dapper.ParameterExtensions 2018.12.7.1 внутри приложения Asp.NET Core (2.1)