【问题标题】:ServiceStack OrmLite - pre and post executionServiceStack OrmLite - 执行前后
【发布时间】:2016-02-19 05:30:53
【问题描述】:

我们正在使用超棒且快速的 OrmLite (ServiceStack) 库作为我们的 microORM 来连接到我们的 PostgreSQL 数据库。

我们在 PostgreSQL 数据库中启用了TDE 加密。为确保在我们查询之前相关数据被解密,我们需要执行以下操作:

Db.ExecuteSql(string.Format("SELECT pgtde_begin_session('{0}');", tdeKey));

最后:

Db.ExecuteSql("SELECT pgtde_end_session();");

我们可以代替将这些插入到我们的每个 RequestDto 方法中,而是确保这些 sql 语句在每次调用之前和之后执行。

【问题讨论】:

    标签: postgresql servicestack ormlite-servicestack


    【解决方案1】:

    您可以尝试使用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();
    

    【讨论】:

    • 谢谢。出于兴趣,您建议在哪里添加上述代码。在主项目还是服务接口?
    • @MarkH 这只是一个静态属性,应该在启动时初始化,即与OrmLiteConnectionFactory一起。
    • 我们注意到 db.ExecuteSql 导致 exec 过滤器被再次调用(递归)。
    • @MarkH 是的,它会为 OrmLite API 做到这一点,你可以尝试只使用 ServiceStack.OrmLite.Dapper 命名空间中 Dapper 的嵌入式版本的 Execute(),否则你需要回退使用原始 ADO.NETs IDbCommand.ExecuteNonQuery()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2022-01-18
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多