我有一种情况,我需要在读写事件发生之前设置 oracle 会话变量/上下文(这是客户的要求,不可协商)。
插入此代码的最佳位置在哪里?我已经重写了该DBContext.New()
方法以及DBContext.OnModelCreating()
用于其他目的,但我不知道它们中的任何一个是否是整个数据库会话的真正开始(因为 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 在这个 sub 之后打开了连接,所以我现在还不能对它执行命令。