2017-04-12 9 views
0

MySQL 테이블에서 데이터를 가져 오기 위해 PetaPoco ORM을 사용하려고합니다. 다음은 단 하나의 레코드를 가져 오는 샘플 코드입니다.petapoco select 쿼리를 일반화하는 방법이 있습니까

public void ShowEmployerDetails() 
     { 
      using (var db = new PetaPoco.Database ("mysql_mydb")) { 
       try { 
        var employers = db.Query <Employers> ("SELECT * FROM Employer WHERE id = 123456789"); 
        foreach(var e in employers) { 
         return e.EmployerName; 
        } 
       } catch (Exception ex) { 
        log.Error (ex.Message); 
       } 
      } 
     } 

db.Query 함수에서 엔터티 형식을 전달해야합니다. 각 DB 테이블에 대해 엔티티를 정의해야합니다. 이 경우, 개체 유형은 <Employers>이며 코드는 다음과 같이이다 :

public class Employers 
    { 
     public int id { get; set; } 
     public string EmployerName { get; set; } 
    } 

우리는 또한 위의 선택 쿼리를 일반화 할 수있는 방법이 있나요? 예를 들어, 내가 좋아하는 단일 쿼리를 사용하여 출력을 얻을 계획입니다 :

PetaPocoQueryEntities <Employers>.GetDataFromEntities ("SELECT * FROM Employer WHERE id = 123456789", "EmployerName"); 

그리고 쿼리 개체 유형은 제네릭 형식 T로 전달 될 수있는 곳 바로 아래 같은 것을하고 열을 제공하는 몇 가지 방법이 있는지 궁금 수 동적으로 항목 이름 및 열 값 가져 오기 :

public static class PetaPocoQueryEntities <T> 
    { 
     public static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

     public static T GetDataFromEntity (string sqlQuery, string colName) 
     { 
      using (var db = new PetaPoco.Database ("mysql_mydb")) { 
       try { 
        var entityResults = db.Query<T> (sqlQuery); 
        foreach (var result in entityResults) { 
         log.Info(colName + " value is " + result.colName); 
        } 
       } catch (Exception ex) { 
        log.Error (ex.Message); 
       } 
       return colName; 
      } 
     } 
} 

도와주세요.

답변

1

짧은 답변 db.Query 기능의 개체 유형을 통과 할 필요가있다 - 예가. PetaPoco는이 정보를 사용하여 쿼리의 데이터를 다시 엔티티에 매핑합니다.

위의 선택 쿼리도 일반화 할 수있는 방법이 있습니까? 예를 들어 다음과 같은 단일 쿼리를 사용하여 출력물을 얻으려고합니다.

네, 이걸 조작 할 수 있습니다. This integration test should get you started.