ServiceStack OrmLite - 预执行和 post 执行
ServiceStack OrmLite - pre and post execution
我们正在使用出色且快速的 OrmLite (ServiceStack) 库作为我们的 microORM 来连接到我们的 PostgreSQL 数据库。
我们在 PostgreSQL 数据库中启用了 TDE 加密。为确保相关数据在我们查询之前已经解密,我们需要执行以下操作:
Db.ExecuteSql(string.Format("SELECT pgtde_begin_session('{0}');", tdeKey));
最后:
Db.ExecuteSql("SELECT pgtde_end_session();");
我们是否可以确保这些 sql 语句在每次调用之前和之后执行,而不是将它们插入到我们的每个 RequestDto 方法中。
您可以尝试使用 OrmLite Exec Filter,像这样:
public class PgSqlSecureSessionFilter : OrmLiteExecFilter
{
public override T Exec<T>(IDbConnection db, Func<IDbCommand, T> filter)
{
try
{
db.Execute("SELECT pgtde_begin_session(@tdeKey)", new { tdeKey });
return base.Exec(db, filter);
}
finally {
db.Execute("SELECT pgtde_end_session();");
}
}
}
OrmLiteConfig.ExecFilter = new PgSqlSecureSessionFilter();
我们正在使用出色且快速的 OrmLite (ServiceStack) 库作为我们的 microORM 来连接到我们的 PostgreSQL 数据库。
我们在 PostgreSQL 数据库中启用了 TDE 加密。为确保相关数据在我们查询之前已经解密,我们需要执行以下操作:
Db.ExecuteSql(string.Format("SELECT pgtde_begin_session('{0}');", tdeKey));
最后:
Db.ExecuteSql("SELECT pgtde_end_session();");
我们是否可以确保这些 sql 语句在每次调用之前和之后执行,而不是将它们插入到我们的每个 RequestDto 方法中。
您可以尝试使用 OrmLite Exec Filter,像这样:
public class PgSqlSecureSessionFilter : OrmLiteExecFilter
{
public override T Exec<T>(IDbConnection db, Func<IDbCommand, T> filter)
{
try
{
db.Execute("SELECT pgtde_begin_session(@tdeKey)", new { tdeKey });
return base.Exec(db, filter);
}
finally {
db.Execute("SELECT pgtde_end_session();");
}
}
}
OrmLiteConfig.ExecFilter = new PgSqlSecureSessionFilter();