0

我開發的應用程序部署到惡劣環境(開發,測試,分期,生產)。實體框架根據部署環境設置數據庫模式

在開發過程中,我從現有的開發數據庫創建實體模型。一切工作正常,但因爲我想將應用程序放到測試環境中,所以我意識到以下問題:

數據庫的結構在所有環境中都是相同的,但數據庫模式從環境變爲環境。例如,每個數據庫中都有一個Customers表。在我的本地開發機器上,它具有模式dbo([dbo].[Customers]),但在測試環境中,模式是測試([test].[Customers]),而架構在暫存環境([stag].[Customers])等中仍然存在。

因此,當我在測試環境中部署應用程序時,它不會從數據庫獲取數據,因爲實體框架期望在[dbo].[Customers]中找到數據,但沒有這樣的表,只有[test].[Customers]

我知道,我可以定義一個schema other than dbo,但這並不能幫助我,因爲根據部署環境的不同,我需要不同的模式。

有什麼建議嗎? 不知怎的,我想我會結束,要求我的數據庫管理員在每個環境中的每個數據庫中將架構更改爲dbo ...

+0

無論如何,後一種選擇是最好的,因爲有一天,您可能想將模式用於其他目的,例如,分離數據模型的邏輯部分。在查詢中使用時,UDF必須以其模式名稱作爲前綴。編寫使用UDF的存儲過程時非常麻煩。 –

回答

1

如果您先使用代碼,則必須使用鏈接問題中的流暢API方法並從配置文件加載當前模式(您將不得不修改每個部署的配置)。

如果您在EDMX中使用ObjectContext,則可以使用Model adapter。與DbContext一起工作的其他方式是將EF元數據存儲在文件中並執行一些代碼,這些代碼將在應用程序啓動時更改ssdl文件中的模式。

+0

模型適配器似乎滿足我的需求,謝謝! – khlr