2011-08-15 33 views
3

我正在做一個圍繞Entity Framework及其相關的.edmx文件的研究。EF和.EDMX性能注意事項

我們目前的設置有一些這些文件被編譯到我們廣泛使用的庫中。當然,這不是一個優雅的解決方案 - 每次我們想要更新或添加到數據庫層中的某些東西時,我們都需要重新編譯這個庫。

我們僅使用存儲過程,而我們當前的方法是在對象上下文中使用ExecuteFunction方法。但是,這確實需要了解從edmx文件導入的函數返回什麼類型(context.ExecutionFunction<T>()返回ObjectResult<T>)。

我的理論解決方案是存儲我們想要在相對路徑下使用的任何.edmx文件,並讓庫在運行時加載它們。

有沒有人試過這個?它工作嗎?是否有任何性能考慮因素需要考慮?這將用於電子商務環境,因此效率和速度非常重要。

編輯一些更清晰:

這肯定會是可能的編譯每個單獨的.edmx文件在其自己的組裝,這可能會允許使用this。對此的任何投入也會很好。

我們打這個電話現在是這樣的

Database.MakeCall<T>("stored_procedure_name", parametersCollection, KnownDatabases.Database); 

在它的構造,數據庫處理程序將保存每個它所知道的數據庫環境(每個the.edmx文件庫)的情況下, 。使用KnownDatabases枚舉,它選擇運行查詢的數據庫。

理想情況下,我想實現這樣一個電話:

Database.MakeCall<T>("context_name", "stored_procedure_name", parametersCollection); 

凡在數據庫處理程序將在其構造函數中,搜索文件夾的.edmx文件並加載它們,然後存儲實例針對上下文名稱的每個上下文。如何定義或獲得T現在有點模糊。

在這兩種情況下,返回類型是ObjectResult<T>

回答

0

你可能會喜歡什麼要考慮的是紅寶石式的數據庫映射,一個在DB模式在運行時確定,所以你不需要保持DB -ORM映射庫代碼。

對於.net,Subsonic擁有Castle和nHydrate這樣的ORM。我知道這樣的系統可以很好地執行,因爲C++實現(ODB)具有一些很好的性能統計信息(即使它從代碼模式生成代碼,但它會自動執行代碼)

+0

我不完全確定該方法是否可行。理想情況下,我們需要能夠針對我們提供的任何數據庫運行存儲過程(我們知道其名稱)。現在,這是通過爲每個數據庫生成一個新的.edmx文件並將其編譯到庫中來實現的。我想實現的是運行存儲過程的代碼與運行它們的數據模型的解耦。 – AndyBursh