Есть ли способ обобщить запрос выбора petapoco

Я пытаюсь использовать PetaPoco ORM для получения данных из таблицы MySQL. Ниже приведен пример кода для получения только одной записи:

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. Для каждой таблицы БД нам нужно определить сущности. В этом случае тип объекта — <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;
            }
        }
}

Пожалуйста помоги.


person Rohan Bhattarai    schedule 12.04.2017    source источник


Ответы (1)


Необходимо передать тип сущности в функцию db.Query.

Краткий ответ - да. PetaPoco использует эту информацию для правильного сопоставления данных из запроса с сущностью.

Есть ли способ, которым мы можем также обобщить приведенный выше запрос на выборку? Например, я планирую получить вывод, используя один запрос, например:

Да, вы могли бы подстроить это. Этот интеграционный тест поможет вам начать работу.

person Plebsori    schedule 12.04.2017