2017-04-12 14 views
0

私はPetaPoco ORMを使ってMySQLテーブルからデータを取得しようとしています。以下は、レコードを1つだけ取得するサンプルコードです。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.

関連する問題