2016-07-20 2 views
0

Dapper.Query에서 반환 된 동적 변수를 객체로 변환 할 수 있습니까? 예 : 기록에서 MyClass의의를 properites을 채우기 위해동적 객체를 dapper로 변환 Query <dynamic>

class MyClass 
{ 
    public int Id { get; set;} 
    public string SomeData { get; set; } 
} 

IEnumerable<dynamic> data = sql.Query<dynamic>(SELECT * FROM MyClassTable"); 
foreach(var record in data) 
{ 
    int parent_id = record.SomeId; 
    // any simple way to fill MyClass properites from record? 
    // instead of doing in manually? 
    MyClass obj = ? 
} 

답변

1

있는 간단한 방법? 수동으로 수행하는 대신 을 사용 하시겠습니까?

아니요. 불행히도 수동으로해야합니다. 가장 좋은 방법은 매핑 논리를 한 곳으로 이동하여 데이터 액세스 레이어에서 다시 사용할 수 있도록하는 것입니다. 일반적으로 확장 메서드를 사용하지만 리플렉션을 사용하여 일치하는 속성 이름을 설정할 수도 있습니다. 그러나 개인적인 견해로는 일반적으로 성능 이점에 대해 dapper를 사용하고 리플렉션 사용은 약간 비싸기 때문에 일반적으로 이러한 경우 반사.

Dapper.Query에서 반환 된 동적 변수를 객체로 변환 할 수 있습니까?

예. 위에서 설명한대로

나는 당신이 아마 당신의 질문을 단순화하고 싶었지만 MyClass이 선택한 쿼리에 의해 반환 된 레코드를 나타내는 경우 동적 객체를 반환 할 필요가 없다는 것을 지적 할 가치가 있다고 생각합니다. 당신은 단순히 다음을 할 수 있습니다 ...

var data = sql.Query<MyClass>(SELECT * FROM MyClassTable"); 
+0

네,하지만 추가 매개 변수가 MyClassTable (예제 SomeId)에서 처리하고 싶습니다. MultiMapping을 알고 있지만이 경우에는 사용하고 싶지 않습니다. – Lukasz

+0

@Lukasz 설명한대로 수동으로 수행해야합니다. – Leo