使用Dapper ORM 持久化复杂对象

3
我已经在我的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
1个回答

1
尝试使用匿名对象:
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不支持这种类型的表达式吗? - vinnylinux
@vinnylinux,我已经在我的回答中尽力解释了。 - Ant P
选择相同的对象进行选择操作吗? - vinnylinux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接