我在一些項目中使用了實體框架。在每個項目中,我都使用映射到實體的存儲過程,這是因爲存儲過程的衆所周知的好處 - 安全性,可維護性等。但是,99%的存儲過程是基本的CRUD存儲過程。這看起來像是否定了實體框架 - SQL生成的主要節省時間的功能之一。實體框架存儲過程與生成的SQL
我讀過一些有關存儲過程與實體框架中生成的SQL的爭論。雖然使用CRUD SPs對於安全性更好,而EF生成的SQL通常比必要的更復雜,但它是否真正購買了使用SP的性能或可維護性方面的任何內容?
這裏是什麼,我相信:
- 大部分的時間,修改SP需要更新數據模型 反正。所以,在可維護性方面並沒有太多的購買。
- 對於Web應用程序,與數據庫的連接使用特定於應用程序的單個用戶ID。因此,用戶甚至沒有直接的數據庫訪問權限。這降低了安全效益。
- 對於一個小型應用程序,使用生成的SQL稍微降低的性能可能不是什麼大問題。對於音量高,性能關鍵的應用程序,EF甚至會明智地選擇 ?另外,EF生成的插入/更新/刪除語句 真的很糟糕嗎?
- 將每個屬性發送到存儲過程都有其自身的性能損失,而EF生成的代碼只發送實際更改的屬性。在對大型表進行更新時,增加的網絡流量和更新所有屬性的開銷可能會否定存儲過程的性能優勢。
雖這麼說,我的具體問題是:
上面列出的正確我的信念?現在ORM越來越受歡迎,總是使用SP的東西是「老派」的想法嗎?根據你的經驗,對於所有插入/更新/刪除操作使用EF映射SP,或將EF生成的SQL用於CRUD操作並僅將SP用於更復雜的東西,哪種方法更好?
'修改SP需要更新數據模型anyway' SP結束了顯著提高應用程序的維護成本,不只是因爲你不得不在至少5處(每一個變化每1 SP插入,更新,和刪除,至少有一個用於選擇,然後也用於實體模型),但也因爲對於任何不是簡單的CRUD操作的應用程序而言,您都將應用程序邏輯隱藏在應用程序之外,開發人員必須在不同的應用程序之間來回跳動IDE的。 –