我正在使用.NET 3.5 SP1,VS 2008與實體框架。我最初添加了一個存儲過程到我的模型,其中有2個參數。後來,我改變了sproc只需要一個參數。我運行了Update Model From Database
菜單選項並確認我的sproc列在Refresh
選項卡中。完成嚮導,清理並重建解決方案,並且模型永遠不會更改sproc的簽名。刷新實體框架中的存儲過程3.5
爲什麼不更新?數據庫功能的更新模型是否被破壞?我錯過了什麼嗎?謝謝。
我正在使用.NET 3.5 SP1,VS 2008與實體框架。我最初添加了一個存儲過程到我的模型,其中有2個參數。後來,我改變了sproc只需要一個參數。我運行了Update Model From Database
菜單選項並確認我的sproc列在Refresh
選項卡中。完成嚮導,清理並重建解決方案,並且模型永遠不會更改sproc的簽名。刷新實體框架中的存儲過程3.5
爲什麼不更新?數據庫功能的更新模型是否被破壞?我錯過了什麼嗎?謝謝。
我將它添加到實體框架後看到了兩個問題,更新存儲過程:
更新EDMX模型(函數導入)
更新存儲過程的複雜類型
打開 「模型瀏覽器」 窗口,當你擁有的.edmx開放。
展開ContentModel,EntityContainer相關:...,然後函數導入節點。爲你的存儲過程尋找功能導入並且雙擊吧。您用於創建它的同一個窗口將打開,但現在已填充其數據。
單擊獲取列信息按鈕(查看按鈕下方的網格以查看將要更改的內容)。
單擊「複雜」單選按鈕選項旁邊的更新按鈕。
點擊確定,並且結果集的複雜類型應該更新。
它花了很多手動編輯XML和Visual Studio的重啓,但我終於能夠讓VS忘記以前的簽名。然後,我只是使用普通的EF嚮導將其添加回來,它工作得很好。
如果更改存儲過程的簽名,則需要通過函數導入來更新在模型中創建的任何複雜類型。
曾在EF4一個類似的問題在沒有選項刷新個人SPS,它的意思去做,當你點擊刷新更新嚮導,但它並不可靠地工作。我不得不在模型瀏覽器中刪除返回值的複雜類型,以及函數import。然後用XML編輯器進入edmx文件並刪除對存儲過程的引用(無法在模型瀏覽器中找到這種方法)。然後重新添加sps。
如果您需要更改數據類型列在結果 - >在STOR PROC的開頭添加 設定FMTONLY關
然後使用 模型瀏覽器 - >功能導入 - - >編輯您的PROC - >獲取列信息按鈕 - >更新按鈕
這是尼爾是怎麼做的:)
您也可以刪除SP的所有證據在以下場所,論文文件可以在打開時在模型瀏覽器中找到.edmx文件:
刪除後,您可以添加它沒有問題。
您不必編輯edmx/xml。這樣做:
當您將存儲過程加入EDMX(我正在討論返回結果集的過程,但它將是一個類似的過程),3,而不是1,創建項目,並且是問題的根源。 (***問題的第二個來源是,在重新導入對象之前,必須在刪除對象之後顯式保存,否則新重新導入的對象將與edmx中未真正刪除(通過保存)的內容發生衝突。
所以做這個:
在模型瀏覽器,通常在左邊,粘貼您的存儲過程的名稱在搜索框中,點擊進入(或搜索),這將降落在初審 - 可能!存儲過程本身,右鍵單擊並刪除,現在將光標放回到搜索框 - >點擊進入或重新搜索,現在你將登陸導入的函數,右鍵單擊並刪除,第三次做同樣的事情 - 這會在表示結果集的複雜類型上着陸,刪除它,現在你完成不了!!!!!,你必須sa你剛剛做了什麼,以便刪除在edmx中寫入(未寫入)。
現在,再次獲取存儲過程(更新模型/選擇存儲的過程)。現在再次點擊保存。
這會每次都有效。關鍵是確保在使用模型瀏覽器搜索出現在模型瀏覽器中的存儲過程名稱的所有實例時,最好不要在默認的命名約定中大驚小怪。第二個關鍵是在完成任何步驟後保存。
我認爲它的概率EF1.0 :( – anishMarokey 2011-02-14 17:34:20
嘗試刪除並重新添加 – 2011-02-14 17:34:48
我怎麼知道哪個版本的EF我正在運行?是否有更新版本的EF可用於3.5? – Jeff 2011-02-14 18:03:46