Dapper에서 중첩 된 생성자 호출

c# dapper

문제

다음을 수행하는 가장 좋은 방법은 무엇입니까 ...

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

푸가 Foo 처럼 생성자를 가지고 있다고 ...

public Foo(Bar test, string zebra)

.. 그리고 Bar 에는 다음과 같은 생성자가 있습니다.

public Bar(int one, int two)

이것은 작동하지 않으며, 원하는 결과를 얻기위한 최선의 방법은 무엇입니까?

수락 된 답변

일반이 아닌 Query 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);

인기 답변

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));


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.