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