我有以下Quote和Share类:

public class Quote
{
    public Quote(string ticker, string name, decimal lastPrice)
    {
        this.Ticker = ticker;
        this.Name = name;
        this.LastPrice = lastPrice;
    }

    public string Ticker { get; private set; }

    public string Name { get; private set; }

    public decimal LastPrice { get; private set; }
}

public class Share
{
    public Share(Quote quote, int quantity)
    {
        this.Quote = quote;
        this.Quantity = quantity;
    }

    public Quote Quote { get; private set; }
    public int Quantity { get; private set; }
}

这些表:

CREATE TABLE [dbo].[quotes](
[ticker] [char](5) NOT NULL,
[name] [varchar](60) NOT NULL,
[last_price] [money] NOT NULL,
[bid_price] [money] NULL,
[bid_quantity] [int] NULL,
[ask_price] [money] NULL,
[ask_quantity] [int] NULL,
[high] [money] NULL,
[low] [money] NULL,
[previous_close] [money] NULL,
[created_by] [varchar](12) NULL,
[created_date] [datetime] NULL,
[modified_by] [varchar](12) NULL,
[modified_date] [datetime] NULL,
CONSTRAINT [PK_quotes] PRIMARY KEY CLUSTERED 
(
[ticker] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  =     ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[shares](
[ticker] [char](5) NOT NULL,
[broker_id] [char](12) NOT NULL,
[quantity] [int] NOT NULL,
[created_by] [varchar](12) NOT NULL,
[created_date] [datetime] NOT NULL,
[modified_by] [varchar](12) NULL,
[modified_date] [datetime] NULL,
CONSTRAINT [PK_shares] PRIMARY KEY CLUSTERED 
(
[ticker] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF,            IGNORE_DUP_KEY        =     OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)     ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE [dbo].[shares]  WITH CHECK ADD  CONSTRAINT [FK_shares_quotes]     FOREIGN KEY([ticker])
REFERENCES [dbo].[quotes] ([ticker])
ON UPDATE CASCADE
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[shares] CHECK CONSTRAINT [FK_shares_quotes]
GO

最后是这段代码:

        string sql = "SELECT quantity, s.ticker, name, last_price FROM shares s " +
                     "INNER JOIN quotes q ON q.ticker = s.ticker " +
                     "WHERE s.ticker=@ticker AND broker_id = @broker_Id";

        IEnumerable<Share> shares = connection.Query<Share, Quote, Share>(sql,
                                        (s, q) =>
                                        {
                                            Share share = new Share(q, s.Quantity);
                                            return share;
                                        },
                                        new { ticker = ticker, broker_Id = brokerId }
                                        , splitOn: "ticker");

        return shares.FirstOrDefault();

执行该查询时,出现以下错误:

“不支持指定的方法”(???)

如果我通过以下方式修改sql语句(“ last_price作为lastPrice”):

string sql = "SELECT quantity, s.ticker, name, last_price as lastPrice FROM shares s " +
                     "INNER JOIN quotes q ON q.ticker = s.ticker " +
                     "WHERE s.ticker=@ticker AND broker_id = @broker_Id";

我收到以下错误:

“ Footstock.Domain.Model.Quote实现需要一个无参数的默认构造函数或一个匹配的签名(System.String代码,System.String名称,System.Decimal lastPrice)”

我究竟做错了什么?

===============>>#1 票数:0 已采纳

对于Share类,您需要添加无参数构造函数或仅接受quantity参数的构造函数。

在Dapper调用组成返回结果的方法之前,它需要构建传递给(s, q) => ...在您的情况下,您需要一个ShareQuote类,这两个类都必须具有可以使用Dapper拥有的数据调用的构造函数。 对于Quote ,构造函数匹配查询中的属性。 对于Share ,Dapper仅具有quantity并且还没有Quote对象。

  ask by Kevin translate from so

未解决问题?本站智能推荐:

1回复

使用Dapper映射子对象

我正在尝试返回包含该订单的订单项的订单。 当前,即使有多个选项行,也仅返回一个选项行。 那是因为我正在调用FirstOrDefault() 可变结果有两个记录。 两者之间的唯一区别是SKU和数量。 如何绘制线形图? 订单对象包含LineItem的列表,我需要将它们全部添加。
1回复

Dapper>多重映射无法将位正确映射到布尔值

我有以下代码: 两个“ connection.Query”执行相同的SQL。 不同之处在于,第一个返回DapperRows的列表,而第二个返回的是通用Query <>,它自动自动映射实体。 现在,在第一个.Query()(返回DapperRows列表)中,布尔属性(以
1回复

使用Dapper以最少的数据库命中率检索父对象和子对象

对象层次结构可能类似于“客户和订单”,我希望所有具有订单的客户都作为“列表”属性。 通常,在ado.net中,我们遍历每个客户并加载他们的订单,这可能导致N个客户与N个数据库匹配。 因此,有什么方法可以直接在Dapper中实现,如果没有,是否有更好的方法可以实现。 编辑 我的想法
1回复

检索对象[使用Dapper的存储过程]

香港专业教育学院试图在网上搜索并在过去的几个小时内编写一些代码,但是没有运气。 我得到了一些我无法使用的代码示例,或者代码无法正常工作,所以我想这是stackoverflow时间:) 长话短说,我的问题对C#和Dapper来说是相当新的,并且想知道我如何从数据库中检索给定的ID? 假设
1回复

如何使用Dapper ORM获取子对象的值?

我正在使用以下内容检索个人资料详细信息: profile对象包含其他集合,如profileImages。 问题是每个子对象的项目计数为零。 另外,我只想获取数据,例如,profileImages。 是否需要设置某些内容来查询子对象,如果有,是否可以指定哪个级别和多少级别?
1回复

使用Dapper映射嵌套对象

在我的项目中,我有两节课 和这个 public class DashboardNodeData { public Node Node { get; set; } public double Latitude { get; set; } p
2回复

Dapper - 使用嵌套对象插入

我有一个具有嵌套类Bank的类User 。 我需要为User创建一个Insert函数。 在Dapper有没有办法执行查询并从嵌套的对象中绑定参数?
1回复

使用Dapper填充类对象

所以我有这些课程。 现在,我想使用Dapper填充Expense类对象。 但是我总是将Category和PaymentModes设置为null。 这是我从数据库获得的结果: 这是获取费用数据的方法: 如您所见,该特定ExpenseID的Category和Paym
2回复

使用Dapper查询复杂对象

我有一个具有以下属性的Customer类: 我的目标是编写一个Dapper查询,该查询将使用内部联接在返回的每个Customer中填充整个Address属性。 这是我所拥有的并且正在运行,但是我想知道这是否是最干净/最简单的方法: 我担心添加其他属性,例如: 我不确定如何切换以上语法以
3回复

Dapper - 如何使用动态对象

我正在使用Dapper从SQL查询并具有动态查询: 当我循环查看结果时,我想知道我正在处理的日期类型是什么,所以我尝试执行以下操作: 但它始终在MessageBox上失败并出现错误Cannot perform runtime binding on a null reference