2

通常情況下,人們將編寫其模型類並創建一個包含多個DbSet的DbContext到相應的模型類,以便首先在EF代碼中創建數據庫。實體框架代碼首先從其他項目添加模型

Prism庫允許您創建模塊。模塊與解決方案中的另一個項目生活在同一個解決方案中,或者可能來自另一個解決方案的DLL。

我現在的問題是:如果你有例如棱鏡模塊(一個分離的項目)與自己的模型(和DbSet定義)。 如何從模塊添加或注入(或讓EF發現)這些模型類和DbSet,並將它們添加到現有的EF數據庫中)?

假設一些外部人員使用自己的數據庫模型編寫了一個插件(棱鏡模塊),並且使用了相應的DbSet定義。 如果該人員將該棱鏡模塊DLL丟棄到程序目錄中,那麼核心應用程序(通常在啓動時)將如何知道棱鏡模塊中還有其他的DbSet,如果它們還不存在,還需要在數據庫中創建。 (以及如何添加?)

在此先感謝。

有人可以給出一個如何做到這一點的代碼示例?我正在考慮MEF的屬性[ImportMany]和[ExportMany],但我不確定這是否可行。

回答

0

我最近有這個問題,並沒有找到一個令人滿意的解決方案。

問題是,尤其是如果您使用RIA服務,所有類都需要在編譯時到位,以便Visual Studio可以爲您生成代碼。我發現的唯一解決方案就是繼承,但我放棄了這個想法,因爲它引入了許多問題纔有效率。如果你不使用抽象類,RIA服務甚至複製繼承結構。但是你仍然需要一個你想要的每個實體的基類(例如CustomerBase在主模塊 - > Customer:CustomerBase中的CustomerModule)。

(細節:原因是,如果你想要外鍵,你必須對BillingModule中的Customer等其他類有一些瞭解。

如果您不喜歡繼承方式,您可以定義您在客戶端上使用部分類手動實現的接口(以便以後只在您的存儲庫中公開此接口)。我堅持這一點,我現在很開心。現在仍然是我希望的方式。

+0

嗯,所以其實你是說我的問題不能用EF代碼先完成? – juFo 2011-12-27 21:44:17

+0

是的......和解決方法是非常繁瑣的。 – LueTm 2011-12-29 01:14:20

相關問題