2013-04-02 168 views
2

我開發了一個使用EF 5和代碼優先的相當不錯的網絡應用程序。但是,在運行基準測試時,我發現性能並不如我想要的那樣高......看起來我進一步發現EF生成的所有查詢都類似於Select * From,這不是最佳做法。使用EF 5代碼優先將實體映射到實體

閱讀這個答案在這裏Select Specific Columns from Database using EF Code First我明白,我可以生成一個視圖,並將其映射到一個實體。我的問題是,如何首先使用EF 5代碼將視圖映射到實體,反之亦然?

我問這個的原因是:我有我的名字進行「preliminar搜索」的搜索項,然後回去的,但有個情況下,剩下一個很寬的表......在另一個我一張大桌子和大多數的我只用標題和說明,而不是LOB列......在所有thouse情況下即時得到不使用數據庫林東西的時候......

所以,如果我確實可以映射以一個實體或反之亦然我可以節省骨幹網和應用層之間的帶寬的很多...

+0

你嘗試[EF電動工具(http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d) - 和「生成視圖」 – NSGaga

回答

0

的方式,我做到這一點不是很乾淨,但:

  • 我創建了一個類型
  • 聲明dbset該類型
  • 如果需要刪除該表在DB
  • 創建一個命名爲使用相同的字段(類型和名稱)刪除的表視圖。

當然全部被封裝在種子方法。

不乾淨,但運行。如果您想「遷移」視圖的結構,我認爲會遇到一些麻煩。但是這樣他就好像你得到一個實體一樣。當然插入和更新可能會很敏感,但這不是我的目的。

如果您尊重命名約定,即使加載策略可用。

1

這不是一回事 - 即不是一個確切答案 - 但它是通過EF稱之爲「視圖」來解決性能問題。

我建議你嘗試一下EF Power Tools - 和「生成視圖」。

通過運行 - 將'views'文件添加到項目中 - 這是一個.cs之一 - 並且增強了核心EF性能(這是一個EF功能,而不是代碼優先 - 但使用動力工具我們現在可以在代碼優先的情況下使用它)。

它不添加「Db的意見」 - 但據我可以告訴 - 它的工作原理是預分析和代碼生成的SQL模板。

「之前的實體框架可以針對概念 模型執行查詢或更改保存到數據源,必須生成一組 本地查詢視圖來訪問數據庫。該意見是 的一部分如果您在同一應用程序域中創建多個對象上下文實例,則它們將從緩存的元數據中重用視圖,而不是重新生成 它們。由於視圖生成是在執行一個查詢的整體 成本的顯著部分,實體框架使您能夠 預先生成這些意見,並將其納入編譯的項目。對於 更多信息,請參閱性能注意事項(實體框架)「
http://msdn.microsoft.com/en-us/library/bb896240.aspx

我能‘感覺’在性能上提升

調:
有它幾個問題 - 你可能會得到一些例外運行它的第一次:

  • 確保類是唯一的文件(它需要第一個),
  • 我不得不將項目從'解決方案目錄'(這是我從power-shell控制檯瞭解到的一個技巧 - 它需要相同)

此外,任何其他嘗試手動「好辦法」數據庫與「真實」的觀點 - 將是徒勞的,我認爲,因爲它不是緊密結合瓦特/ ORM(你需要一個以上 - 和匹配的電話等)。

相關問題