2012-10-02 47 views
2

我有一個很大的MVVM類型的解決方案,我最初使用VS2010 Express編寫了.NET4。該模型使用實體來訪問SQL Server 2012數據庫。C#MVVM升級到EF5 - 實體成員函數何去何從?

我最近失去了Model項目,這似乎並不算什麼大不了,因爲它實際上包含了自動生成的實體並進行了一些小修改。因此,我已經使用.NET4.5和EF5使用VS2012重新創建了模型項目。我已將ViewModel升級到.NET4.5,並使用包管理器導入了EntityFramework。

問題是,我的ViewModel(一個單獨的類庫)拋出了幾個編譯時錯誤,我找不出來。這些圍繞着:

  1. 主實體類(在我的情況下,CN2Entities)不再有一個接受連接字符串的構造函數。這是通過自動完成確認的,它只提供無參數的構造函數。
  2. 映射到數據庫表(如「地址」)的各個數據庫對象類不再包含其靜態成員。例如:

    address_ = Address.CreateAddress(-1);

此代碼用於爲我提供一個很好的空地址記錄來填充和添加到數據庫。這不再有效。實際上,Address類中唯一的靜態成員似乎是「Equals」和「ReferenceEquals」。

  1. 主Entities類不再包含AddToAddress(Address)函數,該函數然後將新地址對象(表示Address表的一行)並將其添加到數據庫中。然後我會調用Entities.SaveChanges()來提交添加。這個功能似乎仍然存在。

任何人都可以請幫助我怎麼回事?這是否與EF5的新工作方式有關?或者我有一個損壞的解決方案不能提供給我正確的參考?

+0

我應該添加上面的「-1」參數與主鍵字段。這是一個虛擬值,在保存記錄時由EF取代。 –

回答

3

乳清你重新創建了模型項目,你已經使用實體框架5與完全不同的API(和不同的自動生成策略)。從EF 4.1開始,EF有兩個API,但在VS 2010中,第二個API(DbContext API)是可選的,只有在引用單獨的程序集後纔可用。在VS 2012中,添加EDMX(VS從NuGet下載附加程序集)時,DbContext API應該默認爲默認值。

您仍然可以使用舊API - 在解決方案資源管理器中展開EDMX文件,並刪除所有擴展名爲.tt的文件。之後,打開EDMX圖和屬性更改代碼生成策略默認並保存該圖。它應該爲舊的API生成類,但我不知道代碼生成器是否與以前在VS 2010中一樣。

+0

非常好,謝謝。我會到我的開發機器,今晚試試這個。現在我知道問題是什麼(以及要搜索什麼),如果現在將推薦使用DbContext API,我可能會看看它。 –

+0

完美 - 我的舊虛擬機現在可以與模型一起工作,而不會改變我的源代碼。如上所述,我現在只需決定使用哪個API。一些背景閱讀的時間! –