[英]Exception on creating a EDMX/DB-Schema using Entity Framework 4 using ContextBuilder with a generic class
[英]change schema name at edmx file dynamically using entity framework 6 db first approach with Oracle DB
我有一個 UI 頁面,其中包含一個帶有多個值的下拉列表。
在 UI 頁面中,用戶將從下拉列表中選擇 select 一個模式,然后應將與該模式相關的數據加載到網格中。 這意味着將來我們可能會獲得更多數量的架構,每個架構都具有相同的 Oracle 數據庫和表結構。
已經使用 DB First 方法和默認配置創建了實體上下文。 但基於上述要求,我需要根據架構更改連接到 Oracle 數據庫。
雖然我在下面使用對我不起作用,但它始終指向在連接字符串中配置的架構,而不是我發送到實體上下文的架構。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
if (SchemaName != null)
{
modelBuilder.HasDefaultSchema(SchemaName);
}
base.OnModelCreating(modelBuilder);
throw new UnintentionalCodeFirstException();
}
有人可以建議最好的方法嗎?
我嘗試在 model 創建時應用架構名稱,如上面的代碼這對我不起作用。
實際需要是,已經使用默認配置的 DB First 方法創建了實體上下文。 但基於上述要求,我需要根據架構更改連接到 Oracle 數據庫。
我通過添加一個幫助程序類找到了解決方案,該類將在運行時通過替換架構來更新實體上下文文件。
我只是按照url EF6 Dynamic Schema Change進行操作 ,它對我來說效果很好。 我將連接更改為使用ORACLE,並從我的服務層調用了此“連接”方法。
我建議您為每個 Oracle 模式創建單獨的實體上下文。 您可以使用相同的 Oracle 帳戶,只要該帳戶可以訪問所有模式(盡管我認為為每個模式使用單獨的帳戶更容易)。 根據運行時選擇的模式,很容易將正確的實體上下文與 if-then-else 語句一起使用。 每個實體 class 的架構嵌入在 .edmx 文件中,即使使用一個 Oracle 帳戶(前提是已授予訪問權限),也不用擔心查詢會失敗。
當然,如果您只使用一個 Oracle 帳戶,那么在創建初始實體上下文時事情會變得復雜。 一種方法是使用原始模式的帳戶(或臨時帳戶),然后將 app.config 編輯為所需的 Oracle 帳戶,或者在完成后刪除登錄觸發器之前嘗試這種方法(注意:我沒有嘗試這種方法,因為我只嘗試了前者)。
就個人而言,我認為使用單獨的 Oracle 帳戶為每個模式設置單獨的實體上下文是一種更簡潔、更簡單的方法,而不是動態更新實體上下文文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.