来自Dapper的嵌套构造函数调用

时间:2017-06-13 12:59:47

标签: c# dapper

执行以下操作的最佳方式是什么......

conn.Query<Foo>(@"SELECT 1, 2, 'ZEBRA'");

Foo有一个像这样的构造函数......

public Foo(Bar test, string zebra)

.. Bar有一个像这样的构造函数:

public Bar(int one, int two)

这不起作用,这是达到预期效果的最佳方法。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用非通用查询API(更多详情请见https://stackoverflow.com/a/8995135/229949):

conn.Query(@"SELECT 1 as one, 2 as two, 'ZEBRA' as zebra")
  .Select(_ => new Foo(new Bar(_.one, _.two), _.zebra);

答案 1 :(得分:1)

如果他们有类似的构造函数要求,请不要直接从Dapper尝试为您的真实模型补充水分。相反,水合成私有/内部类,然后实例化并返回适当的模型。

internal class FooBarQueryModel 
{
    public string Zebra { get; set; }
    public int One { get; set; }
    public int Two { get; set; }
}

conn.Query<FooBarQueryModel>(sql).Select(qm => new Foo(new Bar(qm.One, qm.Two), qm.Zebra));