2013-09-24 32 views
28

我有幾個視圖可根據http://technet.microsoft.com/en-us/library/ms187956.aspx更新。實體框架中的可更新視圖5/6

我所有的觀點都遵循上述文章中的規範。我在SQL Management Studio中驗證過,視圖可以更新,插入和刪除。

我已經做了這項研究使我兩個選擇,使我的實體框架5/6模型更新的觀點:

  1. 從每個視圖中移除標籤,但是,在 所做的任何工作從數據庫更新 的上下文時,MyContext.edmx被覆蓋。這意味着這個解決方案對於我的 項目來說不是非常可行。

  2. 爲每個 視圖添加插入,更新和刪除存儲過程並將其映射到設計器中。我不是特別喜歡 的想法,不得不創建這麼多的存儲過程。

有沒有簡單的方法來告訴EF5或EF6的意見可以添加到/更新/從刪除將無法運行後續的「從數據庫更新模式」,當消滅了命令,而無需編寫存儲過程每個視圖的每個入口方法(插入,更新,刪除)?

回答

7

我認爲你最簡單的方法是改變你的StorageModel中EntitySet的定義,告訴它把它看作一個表,而不是數據庫視圖。

望着XML定義,它說:

<EntitySet Name="Products" store:Type="Views" .. 

把它修改成

<EntitySet Name="Products" store:Type="Tables" .. 

(請注意 「產品」 只是一個例子) 這應該是您的.edmx文件。
參見第44頁,Lerman,「編程實體框架」,第2版。

希望這會有所幫助。

+0

看起來你的示例代碼可能會丟失,但我確實得到了你想說的。我會研究你的建議。 – puddinman13

+0

我的不好 - 我沒有注意到,xml括號會使文本消失。 – JamesWHurst

+1

經過一些測試後,這違反了我的一個約束,「在運行後續的」從數據庫更新模型「命令時不會被擦除」。執行更新時,嚮導認爲View現在是一個表格,並請求再次添加我的視圖以便接收更改。我忽略了請求並運行更新。之後,我收到一個錯誤,指出我的視圖(轉換爲表格)未映射,我需要將其映射到的視圖現在缺失。也就是說,我剛剛從類型的視圖切換到表格後,也收到錯誤。 – puddinman13

1

我認爲不是使用.edmx,而是使用poco類去使用dbcontext和modelbuilder類來映射其非常輕量級或每次更新數據庫時都不更新。它非常高效和可擴展

希望它會有所幫助。

0

您可以從視圖中獲取主鍵並使用主鍵執行更新語句。只是一種解決方法。

+0

好主意,對我很有用。 – mhan0125