gpt4 book ai didi

oracle - 在 Entity Framework/ODP.NET 中的数据库读/写事件之前设置 Oracle session 变量

转载 作者:行者123 更新时间:2023-12-02 01:14:52 28 4
gpt4 key购买 nike

我有一种情况,我需要在读写事件发生之前设置oracle session 变量/上下文(这是客户端的要求,不可协商)。

哪里是插入此代码的最佳位置?我已经出于其他目的重写了 DBContext.New() 方法以及 DBContext.OnModelCreating() ,但我无法判断它们是否是整个数据库 session 的真正开始(因为 EF 是无状态的...?)

很确定实际的代码将是一个简单的 Me.Database.SqlQuery(),只需确定将其放在哪里即可。

我认为的选择:

1

Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
[Other Code]

MyBase.OnModelCreating(modelBuilder)

Me.Database.ExecuteSqlCommand("SESSIONCOMMAND")
End Sub

2

Using CTX As New MyContext()
CTX.Database.ExecuteSqlCommand("SESSIONCOMMAND")

[OTHER CODE]
End Using

3

Public Sub New()
MyBase.New(
New OracleConnection(
ConfigurationManager.ConnectionStrings("MyContext").ConnectionString),
True)

Me.Database.ExecuteSqlCommand("SESSIONCOMMAND")
End Sub

我很确定 #3 是不可能的,因为 EF 在该子命令之后打开连接,所以此时我还无法对其执行命令。

最佳答案

您可以尝试在连接状态从关闭变为打开时执行此操作。像这样...

public partial class MyContext : DbContext
{
public MyContext()
{
this.Database.Connection.StateChange += Connection_StateChange;
}

void Connection_StateChange( object sender, System.Data.StateChangeEventArgs e )
{
if ( e.CurrentState == System.Data.ConnectionState.Open )
{
if ( sender is System.Data.Common.DbConnection )
{
var command = ( sender as System.Data.Common.DbConnection ).CreateCommand();
command.CommandText = "SESSIONCOMMAND";
command.CommandType = System.Data.CommandType.Text;
command.ExecuteNonQuery();
}
}
}

关于oracle - 在 Entity Framework/ODP.NET 中的数据库读/写事件之前设置 Oracle session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412754/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com