2014-01-08 48 views
0

需求是在DbContext可能調用的每個Oracle會話開始時使用DbContext(DatabaseFirst模式中的EF 5)執行sql查詢。
把它放在構造函數中會產生不一致的結果,因爲有些情況下這個sql查詢根本沒有運行。在使用DbContext的Oracle會話開始時運行sql查詢

設置是在DBFirst模式下使用ODP.NET v12託管驅動程序連接到Oracle10gR2的EF5。

public partial class MyContext : DbContext 
{ 
    public MyContext(string connectionString) 
     : base(connectionString) 
    { 
     Database.ExecuteSqlCommand(Constants.SqlQuery); 
    } 
} 

我通過將連接字符串實例化的背景下,因爲連接字符串需要是動態的,如下所示:

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

有沒有一種方法,以確保此查詢總是每當運行Oracle會話創建?

回答

1

您可以擴展DbContext類並實現每種方法。例如....

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

    //Do for all methods 
} 
0

只需實現OnContextCreated()方法在部分類:

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

我不知道這是否會工作,如果有連接池,並且這種改變的行爲當前連接。 –

+0

它適用於我的連接池應用程序,我需要在每次建立連接時啓用某些Oracle角色。 – GriffeyDog

+0

好的,很酷。您是否在使用Oracle Row Level Security? –