我的目的是创建包装双精度包装的自定义结构,并使用Dapper将其保存到数据库中。不幸的是,我遇到了无法解决的问题。
我创建了以下结构:
<input matInput [matDatepicker]="enddate" placeholder=""
(dateChange)="someMethodName($event)" formControlName="EndDate">
并添加了此处描述的自定义类型处理程序(https://medium.com/dapper-net/custom-type-handling-4b447b97c620)
$mail = new \App\Email\NotifyEmail(
'Title',
'content');
$mail->onQueue('email');
\Mail::to($email)->queue($mail);
$mail = new \App\Email\NotifyEmail(
'name',
'gender');
$mail->onQueue('email');
\Mail::to($email)->queue($mail);
public function build()
{
return $this->subject("this is test notification email")
->markdown(
'emails.notifyTest',
[
'name' => $this->name,
'gender' => $this->currency,
]
);
}
我的内置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;
}
}
属性的自定义对象:
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
结果是我收到此错误:“ System.ArgumentException:不支持列'Prop1'的类型。类型为'MyDouble'”。
尽管我直接通过调用public class MyObject
{
public MyDouble Prop1 { get; set; }
}
有人可以帮助解决这个问题吗?
P.S。我在Asp.NET Core应用程序(2.1)中使用了Dapper 1.50.5,Dapper.ParameterExtensions 2018.12.7.1
答案 0 :(得分:0)
查看源代码中的测试,似乎您需要使用其他重载来设置类型处理程序:
https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests/TypeHandlerTests.cs#L101
以及Type Handler类也略有不同:
https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests/TypeHandlerTests.cs#L116
因为构造函数设置为私有,以确保通常的methon
SqlMapper.AddTypeHandler<T>(TypeHandler<T>)
不会被使用