1

我開發一個Web API服務(在Visual Studio 2013年),我已經加入,在我的解決方案,ADO.NET實體數據模型(數據庫優先)。更新模型實體框架6.0

所有我已經包含了表,在我的EDMX圖正確創建。

然後我做了一些改變:我已經在源數據庫中增加了兩個新列,我已經刪除一列。因此,當我嘗試從數據庫更新模型時,添加了兩個新列,而刪除的列仍在我的模型和消息中:

錯誤11009:屬性'映像'未映射。

其中Image是數據庫中刪除列的名稱。

我可以手動刪除模型這個屬性?還是有另一種更清潔和更安全的方法來做到這一點?

+0

我不認爲數據庫第一次*當「從數據庫更新」(即只從存儲方案中刪除)時,從概念方案中刪除*任何東西。但我找不到引文。我只見過人們從概念方案中手動移除東西,這感覺很奇怪。 [這個答案可以解釋它是如何工作的。](http://stackoverflow.com/a/2188799/7724)但在你的情況中,EF會在你的概念方案中看到被刪除的列作爲定製因爲它自動映射到存儲方案和概念方案之間。 – bzlm

回答

2

當然,正如其他人說,改變的方法可能是一個更好的方式與EF和DB的工作,但你需要數據庫優先事實出發,我覺得使用數據庫第一種模式都有它的優點,其中之一(從這個角度來看,這取決於第二個問題的答案)是EDMX是這樣做的,這意味着作爲生成的一段代碼,您可以刷新,銷燬並重新創建每次需要或想要的時候,而不會丟失任何修改。

現在,正如我之前所說,生成的代碼的性質意味着您對EDMX所做的每一項更改都將丟失,因此確保您可以刪除屬性,但模型和數據庫不會同步透明。

我想做到這一點的最好辦法是

  1. 更新數據庫結構
  2. 更新EDMX,如果更新「失敗」,這意味着更改不會反映,破壞EDMX,然後重新創建

即使這種方式可能是一個簡單的方法,不會先欺騙數據庫的性質。

剛一說明:使用數據庫首先,可以通過使用部分類的東西添加到的DbContext,涉及到添加相應的功能和行爲的實體來協助..

+1

如果更新型號從數據庫出現故障, 在這張圖上選擇所有,然後刪除,並做更新型號從數據庫.. 爲我工作。 – PAVITRA

+1

@PAVITRA,你的評論應該是被接受的答案,儘管我能夠刪除與我的任務相關的特定表,然後在「從數據庫更新模型」嚮導期間重新添加。 – David