使用 Entity Framework 5 与 Oracle 11g 对话,为每个会话执行 SQL Alter 命令

Jaf*_*fin 4 entity-framework oracle11g dbcontext entity-framework-5

我需要在每个数据库会话开始时执行一些 SQL 命令。我通过 DbContext 使用 Entity Framework 5 与 Oracle 11g 数据库交谈。

我想执行:

ALTER SESSION SET NLS_COMP=ANSI;
ALTER SESSION SET NLS_SORT=BINARY_CI;
Run Code Online (Sandbox Code Playgroud)

在会话创建开始时进行不区分大小写的搜索。
我怎么能最好地解决这个问题?

我已经将命令放在 dbContext 的构造函数中,但只有简单的单元测试,它似乎确实有效。但不确定这是否正确

public partial class Entities : DbContext
{
    public Entities()
        : base("name=Entities")
    {
        this.Database.ExecuteSqlCommand("ALTER SESSION SET NLS_COMP=ANSI");
        this.Database.ExecuteSqlCommand("ALTER SESSION SET NLS_SORT=BINARY_CI");
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

如果有人正在阅读这篇文章,不,正确的方法是在连接打开时执行以下操作:

public Entities()
    : base("name=Entities")
{        

    ctx.Database.Connection.StateChange += Connection_StateChange;
    ...
}

    private void Connection_StateChange(object sender, StateChangeEventArgs e)
    {
        if (e.OriginalState == ConnectionState.Open || e.CurrentState != ConnectionState.Open)
            return;

       this.Database.ExecuteSqlCommand("ALTER SESSION SET NLS_COMP=ANSI");

    }
Run Code Online (Sandbox Code Playgroud)