1

對於業務應用程序,我提供了一個基本實體模型。此後,最終用戶應該能夠根據其特定需求擴展該模型。在應用程序運行時擴展實體框架模型

對於基本模型,我想使用數據庫優先的方法。但我不知道如何適應允許用戶擴展它。

一個部分在於提供一種用於實體模型編輯的UI,而另一個是其後以反映在模型和數據庫的變化。請提供建議。

編輯
- 一旦實體模型被編輯和保存,所有的EF設施應該像前。
- 型號更新在維護時進行,即未由業務用戶使用。
- 可以編譯受影響的項目並生成新的組件並投入使用。

回答

2

這是不可能的。當您修改實體模型時,您必須修改相關的實體類(或創建新的實體類)=>您必須重新編譯應用程序或使用某些動態程序集。此外,沒有API可以在運行時修改實體映射,因此您將要構建新的實體設計器。

它一般是在客戶端桌面上安裝C#2010 Express和允許他們修改,重建和重新部署應用程序相同的要求。

編輯:

你想要什麼,需要:

  • 對矯正EDMX - 非常複雜的XML文件。爲此編寫自定義工具將是一項複雜的任務。此外,你將不得不添加邏輯,這將不允許用戶破壞應用程序。
  • 運行T4模板以生成新的或修改的實體。
  • 編譯應用程序 - 如果用戶進行修改會破壞構建?
  • 重新部署數據庫 - 這本身非常糟糕,因爲整個數據庫生成邏輯是在Visual Studio中運行的工作流。此外,您需要另一個能夠升級數據庫的工作流程 - 默認情況下,只能部署新的空白數據庫。這樣的工作流程存在,但它需要VS 2010 Premium或Ultimate。
+0

感謝回答。我想我可以從這裏刪除一個約束,也就是說,改變我的應用程序模型(這是在應用程序維護期間完成的,這意味着當時沒有用戶可以訪問應用程序),我可以編譯受影響的項目併產生新的部件。現在有辦法嗎? – Kabeer 2011-03-03 13:39:06

+0

我向原始答覆中添加了說明。 – 2011-03-03 13:51:24

+0

這聽起來很難。首先,T4模板只能在Visual Studio中使用,並且在生產環境中使用Visual Studio不會太優雅。假設我使用數據庫優先方法創建基本實體,我可以使用代碼優先方法實現可擴展性嗎?有沒有一種方法可以將由代碼優先方法生成的模型疊加在數據庫優先模型上?此後,我是否能夠使用單個上下文,以便儘管有兩種方法,我可以爲所有實體獲取單個上下文?最後,你能想到超越EF的解決方案嗎? – Kabeer 2011-03-03 14:03:21