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(); } }