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) 对错误进行排序。
下面是我的主模型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) 对错误进行排序。