【问题标题】:Run sql query at the beginning of an Oracle session using DbContext使用 DbContext 在 Oracle 会话开始时运行 sql 查询
【发布时间】:2014-01-08 21:12:27
【问题描述】:

要求是在 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 会话时始终运行此查询?

【问题讨论】:

    标签: c# oracle entity-framework oracle10g entity-framework-5


    【解决方案1】:

    您可以扩展 DbContext 类并实现每个方法来做到这一点。比如……

    public KashDbContext : DbContext
    {
        public int SaveChanges()
        {
            Database.ExecuteSqlCommand(Constants.SqlQuery);
            base.SaveChanges();
        }
    
        //Do for all methods
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我不知道如果有连接池并且这会改变当前连接的行为,这是否会起作用。
      • 它适用于我的连接池应用程序,我需要在每次建立连接时启用某些 Oracle 角色。
      • 没有。我只需要启用我的应用程序帐户需要执行任何操作的角色,因为该角色是非默认的、受密码保护的。
      猜你喜欢
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多