데이터 주석으로 Dapper.NET 매핑

dapper data-annotations

문제

그래서 저는 다음과 같은 속성을 가진 클래스를가집니다 :

public class Foo
{
  [Column("GBBRSH")
  public static string Gibberish { get; set;}
  ....
}

데이터 저장을 위해 업데이트 / 삽입 문에서 사용자 지정 함수를 사용하도록 구성했습니다.

public static string GetTableColumnName(PropertyInfo property)
{
  var type = typeof(ColumnAttribute);
  var prop = property.GetCustomAttributes(type, false);

  if (propr.Count() > 0)
    return ((ColumnAttribute)prop.First()).Name;
  return property.Name;
}

이 잘 처리하지만 데이터를 검색 할 때 실제로이 특정 열에 대한 함수를 통해 다시 데이터를 끌어 않는 것으로 나타났습니다. 나는 현재 존재하는 다른 데이터가 추출되었음을 알았지 만 문제의 열은 검색하지 않은 데이터가있는 유일한 필드였습니다.

1) Dapper의 검색 부분에 GetTableColumnName 함수를 사용하는 방법이 있습니까?

2) 이와 같은 시나리오가 발생하면 Dapper.NET이 예외를 throw하도록 강제 할 수 있습니까? 실제로 모든 것이 정상적으로 작동하지 않는다는 잘못된 보안 감각을 갖고 싶지는 않습니다. Dapper.NET이 기본적으로 사용하지 않는 매핑을 사용하고 있지만, 그런 식으로 설정하십시오.)

편집하다:

Dapper의 SqlMapper 소스를보고 있습니다.

 private static IEnumerable<T> QueryInternal<T>(params) // my knowledge of generics is limited, but how does this work without a where T : object?
 {
   ...
   while (reader.Read())
   {
     yield return (T)func(reader);
   }
   ...
 }

그래서 이것을 발견 한 후에 두 가지 사실을 배웠습니다. Func을 읽고 양보를 읽으십시오. 내 생각 엔 reader.Read ()를 다른 함수 (열 헤더에 대해 검사하고 적절하게 객체에 삽입)에 전달해야하고 반환 할 필요가 있다고 생각합니다.

수락 된 답변

"SELECT [Column("GBBRSH")] AS Gibberish" 와 같은 별칭을 사용하도록 select 문을 변경하고 속성 이름과 poco 속성 이름 사이에 매핑을 제공 할 수 있습니다.

이렇게하면 Dapper 는 일치하는 속성을 채울 수 있습니다. POCO 만 열의 정확한 이름과 일치해야하기 때문입니다.



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