2011-02-18 55 views
0

我們每6個月運行一系列報告並將結果存儲到可以在將來隨時查詢/查看的表中。根據週期,將添加兩個或四個表格。他們有一個標準的yyyy_mmm_Table_x命名約定。如何在代碼中動態地將表添加到EF4上下文中 - 無代碼優先

我們的網站使用ASP.Net MVC2構建,數據庫使用標準模型設計器而不是Code First使用EF4進行建模。

我希望能夠在運行時動態地將報表添加到EF4上下文中。我不想用設計器手動將它們添加到模型中,否則每個報告週期我們都必須更新並重新編譯模型,因爲我們添加了額外的報告。當沒有其他變化時,這將是一個維護頭痛。

我可以簡單地通過查詢sysobjects來獲取可用表的列表。如果我可以得到這個列表,並在網站啓動時將表格添加到上下文中,那麼我可以使用類似Dynamic LINQ庫的內容來根據用戶從下拉列表中選擇的表格進行查詢。

我不能使用EF4的代碼首先開箱,因爲這會迫使我創建表的具體類,這隻會是同樣的維修頭痛。我懷疑我可以使用Code First框架用來動態更新上下文的相同策略,但是我根本沒有看過這個庫,我希望有人熟悉它可以指向正確的方向。

否則,我想我將不得不退回到ADO.Net來處理這個區域。這可能是最好,最簡單的方法,所以我想我正在尋找意見。我不是一個狂熱者,所以我不需要一切都在LINQ和EF4中。 :)但它似乎有點清潔和一致,特別是如果它允許我使用動態LINQ。但有時舊的方式更簡單。

所以,如果您有任何建議或意見,我很樂意聽到他們。

謝謝!

回答

0

即使使用常見的EF,您仍然需要每個表的新數據類型,因爲當您映射表時,您需要新的實體類型的新ObjectSet才能運行查詢。據我所知,即使表結構完全相同,也不可能將兩個表映射到同一個實體。

所有運行時間映射都存儲在由EntityConnection準備的MetadataWorkspace中。所以如果你想玩它,你可以從那裏開始,但這些類的公共接口看起來並不樂觀。

我想你想在這些表上運行Linq-to-entities,所以使用存儲過程基於數據參數從正確的表返回數據可能不是一個選項。

您應該爲此使用常見的ADO.NET。

相關問題