2010-11-16 50 views
0

這個問題真的存在。覆蓋EF的默認插入/更新/刪除查詢是否有好處

EF建模工具允許我們將插入/更新/刪除功能映射到存儲過程,重寫它們有什麼好處嗎?

如果它需要一些自定義驗證,那麼顯然是的,但如果我現在對它感到滿意,是否值得爲它們創建sproc?

我不記得如何查看正在執行的SQL以查找確切的查詢,但我應該想象它與標準插入/更新/刪除查詢非常相似。

回答

1

我能想到的少數情況下,它可能是有用的:

  • 你是一個傳統的數據庫,並不完全映射到你的EF模型精確地工作。
  • 您需要額外的查詢才能在插入/更新/刪除時執行,但您無權觸發數據庫中的觸發器。
  • 軟刪除您的數據庫,你想抽象的遠離。所以定期刪除實際上會執行軟刪除。

不太清楚這些選項有多可行,因爲我個人更像是一個NHibernate的人。這些是理論選擇。

至於查看執行的查詢,有幾種可能性來做到這一點。您可以將分析器附加到SQL Server實例並查看執行的原始查詢。還有Entity Framework Profiler(由Ayende/Oren Eini提供)不是免費的,但它確實使閱讀和調試查詢變得更容易。

1

是的。壓倒他們是有好處的。

當更新或刪除發生時,並非所有人都會實際更新或刪除一行數據。

在某些情況下,刪除記錄實際上意味着將EffictiveUntil日期設置爲現有記錄,並將歷史記錄保存在數據庫中。

同樣可以用於更新。當前行不是更新現有行,而是當前行獲取EffectiveUntil日期集合,並將全新行插入新的數據,其中有效日期(或類似機制)爲空。

通過爲實體框架提供插入/更新/刪除邏輯,您可以準確指定這些操作在數據庫方面的含義,而不是它們在RDBMS範圍內的含義。至於第二個問題(我顯然最初錯過了),如果您對目前正在生成的內容感到滿意,那麼不,不值得創建它們。每當您更改表結構時,您只需添加必須記住更新存儲過程的額外頭痛。

+0

如果他不需要做這樣的事情,它是標準的CRUD,你的答案仍然是?是否值得創建3 * n存儲過程,以防將來需要這樣做?當然,在這種情況下,您不必碰觸應用程序代碼,但我不相信這是值得的。 – 2010-11-16 15:46:28

+0

@Nelson - 如果您不需要創建存儲過程並且EF的基本CRUD操作可以爲您工作,那麼請不要打擾。這就是爲什麼它是可選的。 – 2010-11-16 15:47:31

+0

哦,你可能對他的第一個問題回答「是」,但是在他的第二個問題中,我會說:「......如果我現在對它感到滿意,是否值得爲他們創建存儲? 「我想我們都同意。 – 2010-11-16 15:55:07