2013-04-15 79 views
0

我有兩個不同的數據庫模型的項目(雖然相同的實體框架版本5.0.0)。如何判斷我是否使用ObjectContext API或DbContext API?

他們的查詢如下所示:

項目1:

if (_db.Entry(customer).State == EntityState.Detached) 

項目2:

if (customer.EntityState == EntityState.Detached) 

這些差異,以及其他小東西。

如何判斷哪個版本的實體框架(當DLL版本匹配時)每個項目正在使用?將「較舊」版本更新爲「較新」型號版本有意義嗎?有什麼好處?

回答

0

項目1使用DbContext API,因爲只有此上下文類型具有Entry方法。

項目2最有可能使用ObjectContext與實體派生自EntityObjectCustomer從那裏繼承EntityState。如果Customer具有自定義的EntityState屬性,則無法區分您的單行。按F12兩次 - 一次在customer變量中,該變量引導您進入聲明,然後指向該變量的類型(可能爲Customer)以查看類聲明並檢查它是否來自EntityObject

事實上,項目2中的EF5組件被引用意味着什麼。它可能在代碼中未使用,或者代碼只使用一些輔助方法(如Include的lambda版本),但似乎並未使用DbContext的所有核心功能。它將引用.NET框架程序集中的EF類(System.Data.Entity.dll等)。

升級項目2值得考慮,因爲EF的所有新開發遵循POCO方法(而不是EntityObject方法)。

+0

謝謝你的解釋。我是否需要刪除舊的數據庫模型並使用相同的(舊模型,但是新的DLL)項目2重新創建它?還是有一些「升級機制」?順便說一下:'customer'派生自'EntityObject'。這意味着,它使用「舊」的方式,不是嗎? – SeToY

+0

@SeToY:是的,這是古老的方式。你可以問一個關於升級的單獨問題嗎?我不確定最順利的方法是什麼,不想讓你陷入麻煩。您還必須期望一些代碼更改(例如,問題中的行將不再工作,也許更多)。將盡可能多的信息放入您的問題中(編譯器版本,.NET版本,EF版本,數據庫版本,如果您從現有數據庫模式開始,或者先使用模型等) – Slauma

+0

我創建了一個新問題,謝謝非常! – SeToY

相關問題