PetaPoco輕量級ORM框架 - 對Database類的進行擴展,能夠返回Table格式數據

 

1、有時咱們須要將經常使用的功能添加到PetaPoco中的Database類中sql

實現方式有2種,如下以查詢字段爲例ide

1.經過擴展方式實現,此方式不改變被調用(Database)類名(只能增長方法)this

public static class DatabaseExtensionspa

{
  public static T SingleOrDefaultWithWhere<T>(this Database db, string name, object value)
  {
    string sql = "WHERE " + name + " = @0";
    return db.SingleOrDefault<T>(sql, value);
  }
}日誌

2.經過繼承Database類,之後全部調用都直接調用Db類(不但能夠增長方法、還能夠對虛方法進行重寫[如執行的SQL語句日誌等],推薦)code

public partial class Db : Database對象

{
  public T SingleOrDefaultWithWhere<T>(this Database db, string name, object value)
  {
    string sql = "WHERE " + name + " = @0";
    return db.SingleOrDefault<T>(sql, value);
  }
}blog

 

2、有時咱們不須要返回實體對象,須要返回一個DataTable格式的數據,這時就須要對Database進行擴展,繼承

        如下是返回一個DataTable格式的數據:cmd

public DataTable Table(string sql, params object[] args)
        {
            OpenSharedConnection();
            try
            {
                using (var cmd = CreateCommand(Connection, sql, args))
                {
                    using (DbDataAdapter dbDataAdapter = Provider.GetFactory().CreateDataAdapter())
                    {
                        DataTable dt = new DataTable();
                        dbDataAdapter.SelectCommand = (DbCommand)cmd;
                        dbDataAdapter.Fill(dt);
                        OnExecutedCommand(cmd);
                        return dt;
                    }
                }
            }
            catch (Exception x)
            {
                if (OnException(x))
                    throw;
                return null;
            }
            finally
            {
                CloseSharedConnection();
            }
        }
相關文章
相關標籤/搜索