2012-11-19 243 views
41

如果我對EF 5.0模型做了任何更改,VS似乎沒有看到更改。我曾嘗試添加一個新的表格,該表格在模型中顯示得很好,但如果我嘗試在某處使用該表格,則該表格不會顯示在intellisense中,我無法使用它。更新實體框架模型後,Visual Studio看不到更改

我也嘗試更改列的數據類型,如果我查看.edmx模型文件,它又顯示正常,但visual studio仍然會給我編譯器錯誤,因爲我試圖分配不正確的數據類型。

如果我完全刪除了EDMX,然後重新創建它,那麼這些更改就可以正常工作。但每次我應該能夠「從數據庫更新模型」並重建時,從數據庫重新生成是很麻煩的。

我以前從來沒有遇到EF的這些問題。有誰知道這個問題的原因或解決方法?

謝謝。

+1

什麼是你的EDMX代碼生成策略? (打開edmx,點擊F4) – Heather

+1

@ Heather它被設置爲'None'。我試着將它改爲'Default',認爲肯定是問題所在,現在我有幾十個錯誤說,Type [table]已經包含了每個表/列的[column]的定義。有什麼想法嗎? – Kyle

+1

是的,你已經解決了你的問題的前半部分。 「無」根本不會生成代碼。現在您正在生成代碼,您需要解決數據庫與edmx之間的邏輯不一致問題。通常有兩種方法可以做到這一點:第一種方法是從edmx中刪除每個實體,然後從數據庫運行更新。 – Heather

回答

15

如果這是位於一個文件夾中的文件EDMX臭蟲現在是固定的 - 下載和安裝VS 2012更新1.你可以得到它:http://www.microsoft.com/visualstudio/eng/downloads#d-visual-studio-2012-update

+0

也有同樣的問題,安裝了更新,它在edmx表中刷新後工作。 EF版本4.4,他們解決這個問題的時間到了! –

+0

只是站起來。 EF打開多個解決方案時不起作用。必須全部關閉,以便VS抓住變化。 (即使有完全獨立的項目。) –

+2

我有VS 2013更新1,但同樣的錯誤發生。 –

0

您是否在N層項目中工作?如果是這樣,請在使用之前重新嘗試重建數據層(或存儲EDMX文件的任何地方)。

+0

edmx與我使用的是同一個項目。儘管我試圖評論編譯器錯誤重建它,但沒有成功。 – Kyle

+0

我會研究Heather在你的問題上提出的建議。代碼生成策略應該設置爲默認情況。 – Middas

+0

我也會檢查你的表格和欄目,確保它們可以公開訪問。 – Middas

7

您應該有一個<XXX>Model.tt文件,它是生成模型類的T4模板。

如果它位於不同的項目中,它在保存edmx文件時不會更新。

無論如何,嘗試在Solution Explorer中右鍵單擊並選擇Run Custom Tool

+0

另一種方式:如果您選擇「運行自定義工具」而沒有保存edmx文件,實體將不會被更新。 – bvgheluwe

13

這顯然是在實體框架中的錯誤,當你的EDMX文件所在的文件夾裏面的模型沒有得到更新。 目前可用的解決方法是:

  1. 安裝VS 2012 Update 1,它應該修復該錯誤。
  2. 如果您無法安裝Update 1,則必須右鍵單擊model.tt T4模板文件並單擊運行自定義工具。這將爲您更新課程。

希望能幫助那裏的人。

鏈接:http://thedatafarm.com/blog/data-access/watch-out-for-vs2012-edmx-code-generation-special-case/

+0

現在已經修復 - 請參閱我的其他回覆。 – Pawel

+0

哈哈不錯的一個帕維爾,看起來像我們在一個小時內發佈了相同的解決方案。 – Ghlouw

+0

謝謝,我現在運行自定義工具後爲我工作。 – arunlalam

52

先建您的項目,如果成功,請在上下文中指向「model.tt」。然後運行自定義工具。它會解決它。

再次構建您的項目並指向「model.context.tt」運行自定義工具。它會更新DbSet列表。

+0

工程就像一個魅力。 – shazia

+1

非常感謝!這個錯誤似乎已經在VS2013更新3中回來了,但遵循這個提示是一個快速簡單的解決方法。 – Patrick

+0

非常感謝。我必須首先顯示排除的項目,然後重新包含.tt's以運行該工具。 –

6

我也有這個問題,但是,右鍵單擊model.tt文件並運行「自定義工具」對我來說沒有任何影響,但對頁面Ghlouw提到的使用菜單項「BUILD>轉換所有T4模板。「這爲我做

2

我尋找這個答案,因爲我在VS2013類似的情況。以我爲例,我發現一個簡單的」 Clean Solution「清除了所有的舊的定義。

0

我已經也沒有遇到這個問題,在model.tt文件下沒有生成任何類。在我的情況下,這是由於我在SQL2012中構建數據庫時遇到的問題。我在表中設置了一個列,以便可以爲null一個外鍵,雖然我認爲你應該可以做到這一點,但它在EF5中引起了一個問題:

一旦這個被清除並且圖表從數據庫更新後,它們就會重新出現

EF5 VS2013

1

右鍵單擊.tt文件並選擇「運行自定義工具」,應該對其進行更新: see image