2012-09-20 43 views
12

在實體框架5模型第一,看起來似乎是由於類文件生成的方式有一些重大的變化(沒有更多的代碼生成,但T4模板)實體框架5模型第一 - IDisposable去哪了?

2個例子:

  • 生成上下文文件沒有實現IDisposable了
  • 沒有一個構造函數,需要的ConnectionString了

是否有更重大的變動?他們有什麼解決方案?

回答

33

從實體框架5中的模型生成的默認代碼現在繼承了DbContext而不是ObjectContext。

這仍然實現了IDisposable,但如果你從類似這樣一行代碼得到一個錯誤:

using (var mymodel = new MyModelContext()) { ... } 

...抱怨不執行IDisposable接口,那麼你的問題很可能是你的模型在引用EF5的單獨程序集中定義,並且您尚未向項目添加EF5引用。

正如Ladislav Mrnka在他的回答中已經提到的,如果您想要將連接字符串傳遞給構造函數,您必須手動創建自己的構造函數來執行此操作。

如果你想切換實體框架回生成的代碼上了年紀的風格,這將自動生成你正在尋找的構造函數,然後按照下列步驟:

  1. 點擊的設計師表面上你EDMX文件,並查看屬性窗口。找到一個名爲「代碼生成策略」的屬性,並將其設置爲「默認」而不是「無」。這將告訴Visual Studio開始在MyModel.Designer中爲您的對象模型創建代碼。cs在一個大文件中,這次使用ObjectContext而不是DbContext。
  2. 從您的EDMX文件下方刪除以下子文件:MyModel.Context.tt,MyModel.tt。這些是您不再需要的自動生成的文件。如果你不刪除它們,你會得到類命名衝突,因爲你的對象將被創建兩次。
+0

謝謝!如果其他人錯過了它,實現「使用(...)」代碼的項目需要新的EntityFramework.dll,而不僅僅是保存.edmx文件的項目。 – Parmenides

+0

@Parmenides你能指定它需要哪個引用嗎? – Zapnologica

+0

謝謝!除了對EntityFramework的引用外,我還需要添加對System.Data.Entity的引用,然後我的「使用」錯誤消失。 :) –

5

產生的背景文件不實現IDisposable了

IDisposable仍然由父上下文類型實現。生成的類型仍然是一次性的。

沒有一個構造函數,需要的ConnectionString了

它現在使用約定來獲取連接字符串,但您可以添加自己的構造函數模板或上下文中的局部類的一部分。

是否有更多重大變更?他們有什麼解決方案?

這是整個重大更改,因爲它使用不同的API - 的DbContext API,而不是ObjectContext的API如果你想找回原來的代碼生成,這意味着不同的類型,不同的方法,POCO實體等,你必須刪除這些T4模板並按照.Designer.cs文件中所述啓用代碼生成,但目前推薦的方法是使用POCO和DbContext API。

1

我與使用語句需要擴展IDisposable類型相同的問題......原來,我忘了在我的項目中引用System.Data.Entity ...添加了引用,它修復了問題。