2013-02-11 5 views
4

Dapper을 사용하여 비즈니스 모델에 개체 관계 매핑을 제공하기를 바랍니다. 현재Dapper를 사용하여 추가 동적 속성을 사용하여 강력한 형식의 모델로 바인딩

Id 
Title 
c_MyCustomField1 
c_MyCustomField2 

, 모든 필드가 반환됩니다 이러한 데이터 모델과 함께

, 우리는 종종 사용자가 만든 및 반환 된 결과 집합의 일부로 표시되는 사용자 정의 필드 (런타임에 알려져 있지 않다) 발생 독자와 함께 처리했다. 이 모든 것을 Dapper으로 옮기고 싶지만 동적 사용자 정의 필드와 혼합 된 강력한 형식의 객체를 혼합하는 방법을 고민하고 있습니다.

우리는 다음과 같이 우리의 옵션을 참조하십시오

  1. 동적으로 말끔에서 모든 결과를 확인하고 우리 자신의 바인딩을한다.
  2. Dapper를 가져 와서 강력한 형식의 모델에 바인딩하고 별도의 호출을 만들어 사용자 지정 필드를 연결합니다.
  3. 중간에 들어가기 위해 Dapper를 확장하면 특정 사용자 사례를 추가하여 알려진 필드와 동적 필드를 모두 바인딩 할 수 있습니다.

1은 역효과를 보인다 그리고 우리는 아마도 당신이 처음부터 단정을 소개하는 것입니다 이유는 성능 저하를 취할 것입니다. 데이터 공급자에게 엄청난 변화가 필요하기 때문에 실제로 할 수 없습니다. 나는 Dapper의 출처에 속하지 않는다는 것을 알고 있습니다.

나는 성배이 같은 모델로 끝나는 될 것이라고 생각 :

class Model 
{ 
    int Id {get; set;} 
    string Title {get; set;} 
    IList<CustomField> CustomFields {get; set;} 
} 

class CustomField : dynamic 
{ 
    string Name {get; set;} 
    object Value {get; set;} 
} 

이가 말끔를 사용하여 수행 할 수있는 방법이 있나요?

항상 그렇듯이 제안 사항은 크게 감사하겠습니다.

답변

3

현재 dapper에서 완벽하게 모델링 할 수 없습니다. 비 제네릭 API를 사용하여 무언가를 수행 한 다음 바인딩을 수동으로 적용 할 수 있습니다.

class Model { 
    private dynamic obj; 
    public int Id { get { return obj.Id; } set { obj.Id = value; } } 
    public string Title { get { return obj.Title; } set { obj.Title = value; } } 

    public object this[string key] { 
     get { return ((IDictionary<string,object>)obj)[key]; } 
     set { ((IDictionary<string,object>)obj)[key] = value; } 
    } 
} 

당신은 일반적인 매개 변수를 지정하지 않고 Query를 사용하여 dynamic/IDictionary<string,object>를 얻을 수 있습니다 : 아니면 단지 동적 포장.

+0

충분히 재미있게 '깨끗한'은 이것을 논의 할 때 꽤 많이 나온 형용사였습니다. 당신의 제안은 우리가 도약하기로 결심한다면 우리가 향하는 길이어야한다고 분명히 느낍니다. 시간 내 줘서 고마워. –

+0

Dapper의 최신 버전에서 더 좋은 방법으로 바인드 할 수 있습니까? –

+0

@CoderAbsolute 현재 아니, 아니요 –