PetaPoco轻量级ORM框架 - 对Database类的进行扩展,可以返回Table格式数据

时间:2023-10-01 10:45:38

一、有时我们需要将常用的功能添加到PetaPoco中的Database类中

实现方式有2种,以下以查询字段为例

1.通过扩展方式实现,此方式不改变被调用(Database)类名(只能增加方法)

public static class DatabaseExtension

{
  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语句日志等],推荐)

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

二、有时我们不需要返回实体对象,需要返回一个DataTable格式的数据,这时就需要对Database进行扩展,

        以下是返回一个DataTable格式的数据:

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