Net core dapper insert model inside model error: the member cannot be used as a parameter value

Net core dapper insert model inside model error: the member cannot be used as a parameter value

下面是我的主模型MyModel。

Options 是 属性 类型的 Options。

在 PostGres 选项中是一个 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类型的成员Options不能作为参数值”

Dapper 如何知道我发送的选项模型? 我应该在发送到 Dapper 之前序列化选项吗?

我找不到很多这种模型中有模型的例子。

Dapper 知道选项模型,因为您将其名称定义为 sql 参数 (@options),它会尝试将每个模型 属性 映射到匹配的查询参数中。

您可以定义自己的类型处理程序 ITypeHandler 来处理序列化,或者像这样传递模型:

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

在此处查看如何创建自定义类型:https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests/TypeHandlerTests.cs#L101

在我的 SQL 中使用 CAST(@options as json) 对错误进行排序。