2013-04-26 108 views
1

使用實體框架,我創建了一個應用程序,它能夠從它建模的數據庫中讀取數據。我現在有另一個數據庫,有相同的表,託管在另一臺服務器上。實體框架DbContext兼容不同的數據庫

問題是第二個數據庫上的表屬於與原始名稱不同的名稱的模式,因此僅更改app.config文件中的上下文的連接字符串不起作用。 (我得到錯誤「表或視圖不存在」)。自動生成的代碼中必須有一些映射,指出原始模式名稱。

處理這種情況的正確方法是什麼? 我真的不想重新建模第二個數據庫,因爲它與第一個數據庫相同。 我無法更改數據庫,因爲其他應用程序將停止工作。

任何在正確的方向微調將不勝感激。

+0

凝視你的EDMX文件,爲純文本。 – Kelmen 2013-04-26 08:01:40

+0

是的,這證實了我的想法,其中提到了第一個數據庫的模式。有沒有辦法通過配置來驅動模式名稱? – philreed 2013-04-26 08:17:53

回答

0

好的,這就是我爲解決這個問題所做的。

作爲@Kelmen在評論中提到,在文本編輯器中打開EDMX文件顯示這是模式信息的存儲位置。所以我想我可以簡單地清除模式屬性的值並使用連接字符串來驅動模式。

這感覺不對了幾個原因:

  1. 如果該模型在任何時候刷新,它可能重新填充架構名稱,這將是非常惱人。我沒有時間去測試這是否會發生。

  2. 如果我確實需要在運行時更改模式名稱,該方法不會讓我控制模式名稱。

解決方案是使用Code First和Fluent API在派生的DbContext類中的OnModelCreating事件中編輯模型配置。

我正在考慮修改我的上下文類,以便我可以傳入架構的名稱或可能從我的app.config中將其驅動。

我找到的鏈接教程是非常有用的:

Change Schema of Entity Framework

Entity Framework Change Schema Name Per Connection