在 Entity Framework 核心中使用 Oracle 的 DBMS_SESSION.set_context

Use Oracle's DBMS_SESSION.set_context in Entity Framework Core

我需要在我的 .net 核心程序上显示一个 Oracle 视图,该视图在数据库中有一些按

筛选的列
... WHERE dictionary.LANGUAGE = SYS_CONTEXT ('CLIENTCONTEXT', 'LANGUAGE');

显然,直接在应用程序上获取数据会使这些列 return 成为空值。

我需要实现这样的东西

OracleCommand cmd = new OracleCommand(String.Format("BEGIN DBMS_SESSION.SET_CONTEXT('CLIENTCONTEXT', 'LANGUAGE', '{0}'); END;", ActualLanguage), ORACLEconn as OracleConnection);
cmd.ExecuteNonQuery();

我将如何使用 Entity Framework Core 实现代码?我需要在创建模型时调用它一次还是每次创建新的 DbContext 时调用它?

谢谢。

如果您有一个仅在需要设置会话上下文时使用的 DbContext 构造函数,您可以强制打开连接,并且它将保持打开状态,直到您的 DbContext 被释放。例如

public Db(DbContextOptions opts) : base(opts)
{
    this.Database.OpenConnection();
    this.Database.ExecuteSqlRaw("BEGIN DBMS_SESSION.SET_CONTEXT('CLIENTCONTEXT', 'LANGUAGE', 'whatever'); END;");
}

或者您可以在每次打开连接时使用 Interceptor 到 运行 命令。