Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Oracle会话开始时使用DbContext运行sql查询_C#_Oracle_Entity Framework_Oracle10g_Entity Framework 5 - Fatal编程技术网

C# 在Oracle会话开始时使用DbContext运行sql查询

C# 在Oracle会话开始时使用DbContext运行sql查询,c#,oracle,entity-framework,oracle10g,entity-framework-5,C#,Oracle,Entity Framework,Oracle10g,Entity Framework 5,要求在DbContext可能调用的每个Oracle会话开始时使用DbContext(DatabaseFirst模式中的EF 5)执行sql查询。 将其放在构造函数中会产生不一致的结果,因为在某些实例中,此sql查询根本没有按预期运行 安装程序是EF5,处于DBFirst模式,使用ODP.NET v12托管驱动程序连接到Oracle10gR2 public partial class MyContext : DbContext { public MyContext(string conne

要求在DbContext可能调用的每个Oracle会话开始时使用DbContext(DatabaseFirst模式中的EF 5)执行sql查询。
将其放在构造函数中会产生不一致的结果,因为在某些实例中,此sql查询根本没有按预期运行

安装程序是EF5,处于DBFirst模式,使用ODP.NET v12托管驱动程序连接到Oracle10gR2

public partial class MyContext : DbContext
{
    public MyContext(string connectionString)
        : base(connectionString)
    {
        Database.ExecuteSqlCommand(Constants.SqlQuery);
    }
}
我通过传递连接字符串来实例化上下文,因为连接字符串需要是动态的,如下所示:

using(var context = new MyContext(GetConnectionString()))
{
  ...
  ...
  context.SaveChanges();
}

是否有办法确保在创建Oracle会话时始终运行此查询?

您可以扩展DbContext类并实现每个方法来实现此功能。例如

public KashDbContext : DbContext
{
    public int SaveChanges()
    {
        Database.ExecuteSqlCommand(Constants.SqlQuery);
        base.SaveChanges();
    }

    //Do for all methods
}

只需在部分类中实现
OnContextCreated()
方法:

    partial void OnContextCreated()
    {
        this.ExecuteStoreCommand(Constants.SqlQuery, new object[] { });
    }

我不知道如果存在连接池并且这会改变当前连接的行为,这是否会起作用。它在我的连接池应用程序中起作用,我需要在每次建立连接时启用某些Oracle角色。否。我只需要启用我的应用程序帐户执行任何操作所需的角色,因为该角色是非默认的、受密码保护的。