2

該場景基本上是我需要一個域模型用於我的程序,但要連接包含ofcourse不同模式的不同供應商數據庫。如何使用實體框架更改模式數據庫

是否可以手動更改xml SSDL文件?也許最好爲每個供應商數據庫創建一個數據實體模型,並創建類似模塊的應用程序配置選項?再次,我會需要在我的應用程序內的特定pocos管理,而不是每次都不一樣。這讓我想到了創建一個圖層以將EF實體的屬性複製到我的poco對象的可能解決方案。

您的反饋是寶貴的!

Thanx

回答

2

這是奇怪的要求。您正在構建應該適用於某些預期數據結構的應用程序,但同時您希望存儲的數據結構對於每個部署都不同?

可以創建多個版本的SSDL and load MSL, SSDL and CSDL from files而不是資源,但是如果您在SSDL中更改表名或列名,則還必須修改MSL,因爲它描述了SSDL中定義的表與CSDL中定義的實體之間的映射。每個客戶端執行此操作可能會成爲維護噩夢,因爲您必須爲每個客戶端使用一個EDMX(每個客戶端也使用新的CSDL),或者手動修改SSDL和MSL的XML。如果您使用POCO,則不必擔心多個映射,因爲如果您的CSDL對實體和列使用的名稱仍然相同,則它將起作用。

如果你的模塊需要在客戶端數據庫中不需要的表,那麼你可以簡單地添加一個隱藏相關功能的配置(或者在意外使用功能時拋出異常),但是你的SSDL仍然會模仿桌子是存在的。否則,你真的必須創建多個EDMX - 無論是由模塊或客戶端。

將應用程序分成模塊對設計有另一個影響。如果您使用單個EDMX,您仍然必須確保實體之間不存在導航屬性,只能通過安裝一些模塊來打破這些導航屬性。>不能爲可選模塊的實體導航屬性。如果您爲每個模塊創建EDMX,除了某些共享的重用EDMX之外,根本不能有交叉模塊導航屬性。

我認爲應用程序部署過程的一部分應該是爲應用程序創建可更新的視圖。這會將未知架構映射到預期架構,以便您仍然使用單個SSDL。我沒有嘗試過,但我希望它能工作。

+0

Thanx的答覆,我認爲它會更好地保持每個客戶端使用EDMX模塊的情況下,如果我可以應用相同的POCO程序集到每個模型!不知道如果這可以工作!我想最大的問題是具有導航屬性的問題。我會研究這些案例。 – 2011-04-11 08:52:30

相關問題