簡體   English   中英

使用實體框架 6 db 第一種方法與 Oracle DB 動態更改 edmx 文件中的模式名稱

[英]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 Sc​​hema Change進行操作 ,它對我來說效果很好。 我將連接更改為使用ORACLE,並從我的服務層調用了此“連接”方法。

我建議您為每個 Oracle 模式創建單獨的實體上下文。 您可以使用相同的 Oracle 帳戶,只要該帳戶可以訪問所有模式(盡管我認為為每個模式使用單獨的帳戶更容易)。 根據運行時選擇的模式,很容易將正確的實體上下文與 if-then-else 語句一起使用。 每個實體 class 的架構嵌入在 .edmx 文件中,即使使用一個 Oracle 帳戶(前提是已授予訪問權限),也不用擔心查詢會失敗。

當然,如果您只使用一個 Oracle 帳戶,那么在創建初始實體上下文時事情會變得復雜。 一種方法是使用原始模式的帳戶(或臨時帳戶),然后將 app.config 編輯為所需的 Oracle 帳戶,或者在完成后刪除登錄觸發器之前嘗試這種方法(注意:我沒有嘗試這種方法,因為我只嘗試了前者)。

就個人而言,我認為使用單獨的 Oracle 帳戶為每個模式設置單獨的實體上下文是一種更簡潔、更簡單的方法,而不是動態更新實體上下文文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM