使用 Dapper ORM 持久化复杂对象
Persisting complex objects with Dapper ORM
我在 Dapper ORM 上设置了以下复杂模型,但它拒绝持续存在:
const string sqlQuery = "INSERT INTO Reports (created_at, post_name) VALUES (@CreatedAt, @PostData.PostName)";
_connection.Execute(sqlQuery, report);
namespace Foobar.Models
{
public class Report
{
public int Id { get; set; }
public DateTime CreatedAt { get; set; }
public PostData PostData { get; set; }
}
public class PostData
{
public string title { get; set; }
public double index { get; set; }
}
}
这是我遇到的错误:
The member PostData of type Foobar.Models.PostData cannot be used as a parameter value
尝试使用匿名对象:
const string sqlQuery =
"INSERT INTO Reports (created_at, post_name) VALUES (@CreatedAt, @PostName)";
_connection.Execute(sqlQuery, new { CreatedAt = report.CreatedAt,
PostName = report.PostData.PostName });
您所拥有的问题是,您正在有效地尝试将 PostData
对象作为名为 PostData.PostName
.
的 SQL 参数的值传递
请记住,"@parameter"
语法是原始的 SQL,不是 Dapper 本身的功能。映射过程中没有任何阶段涉及将 SQL 参数名称解释为针对您传递的对象的表达式。映射通过简单地将参数名称与 属性 名称匹配并从您传递的对象中注入相应的值来工作。
我在 Dapper ORM 上设置了以下复杂模型,但它拒绝持续存在:
const string sqlQuery = "INSERT INTO Reports (created_at, post_name) VALUES (@CreatedAt, @PostData.PostName)";
_connection.Execute(sqlQuery, report);
namespace Foobar.Models
{
public class Report
{
public int Id { get; set; }
public DateTime CreatedAt { get; set; }
public PostData PostData { get; set; }
}
public class PostData
{
public string title { get; set; }
public double index { get; set; }
}
}
这是我遇到的错误:
The member PostData of type Foobar.Models.PostData cannot be used as a parameter value
尝试使用匿名对象:
const string sqlQuery =
"INSERT INTO Reports (created_at, post_name) VALUES (@CreatedAt, @PostName)";
_connection.Execute(sqlQuery, new { CreatedAt = report.CreatedAt,
PostName = report.PostData.PostName });
您所拥有的问题是,您正在有效地尝试将 PostData
对象作为名为 PostData.PostName
.
请记住,"@parameter"
语法是原始的 SQL,不是 Dapper 本身的功能。映射过程中没有任何阶段涉及将 SQL 参数名称解释为针对您传递的对象的表达式。映射通过简单地将参数名称与 属性 名称匹配并从您传递的对象中注入相应的值来工作。