net core dapper insert model inside model error:成员不能用作参数值

t0ybt7op  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(412)

下面,我有我的主要模型mymodel。
options是options类型的属性。
postgresoptions中有一个jsonb列。

public class MyModel
{
    public string Id { get; set; }
    public Options Options { get; set; } = new Options();
}

选项模型:

public class Options
{
    public string Test { get; set; }
}

使用dapper,我插入如下内容:

public async Task Create(MyModel model)
{
string sql = "insert into MyModel (id, options) values (@id, @options)"
....

我得到这个错误:
“myapp.models.api.options类型的成员选项不能用作参数值”
dapper是如何知道我发送的选项模型的?我应该在发送到dapper之前序列化选项吗?
我找不到很多这样的例子,模型里面有模型。

voase2hg

voase2hg1#

dapper知道options模型,因为您将其名称定义为sqlparam(@options),它会尝试将每个模型属性Map到匹配的查询参数中。
您可以定义自己的类型处理程序 ITypeHandler 它处理序列化,或者像这样传递模型:

new 
{
  model.Id,
  options = JsonConvert.SerializeJson(model.Options)
}

请参见此处如何创建自定义类型:https://github.com/stackexchange/dapper/blob/master/dapper.tests/typehandlertests.cs#l101

相关问题