2012-07-28 132 views
1

到目前爲止,我一直在使用Linq to Sql來處理MVC3,以便所有模型都已經預先生成,我將自己創建數據庫,然後將表移動到dbml編輯器中,如果我想更改表格,我將刪除編輯器上的實體並再次將其拖動。它工作得很好,但我注意到微軟正在與EF進行很多合作,而且我也應該學習這一點。請向我解釋實體框架asp.net

所以,看了一些文章後,我完全糊塗了。我想從Code First方法開始,據我所知,它使開發人員首先爲實體創建模型,然後模型創建數據庫。這裏最令人困惑的是,當我更改模型時,並且在運行時將模型與實體進行比較時,如果它確定兩者不相同,則會刪除所有表並重新創建它們。如果是這樣的話,我該如何堅持我的數據?我如何儲存我的所有桌子,以免它們掉落?我應該使用「數據庫優先」方法嗎?

請幫忙。謝謝!

回答

4

您完全正確地看待實體框架而不是Linq To Sql。微軟專注於EF,這就是要走的路。實體框架有三個選項:

  • 數據庫首先
  • 機型第
  • 代碼首先

隨着數據庫首先你,你用它來創建一個模型爲您現有的數據庫。這是在一個設計器中完成的,它會告訴你你的模型是怎樣的,以及你可以在哪裏修改你的實體和數據庫之間的映射。

模型首先從一個空的設計者開始。你創建你的實體,然後你讓實體框架爲它創建一個數據庫模式。

使用代碼首先,您沒有設計師。相反,您使用代碼創建實體,並在運行時創建實體到數據庫的映射。這是通過一些約定(如每個實體對其自己的表,Id屬性作爲主鍵)以及通過您可以添加的自定義映射完成的。

從Linq到Sql的背景,模型第一/數據庫第一聽起來可能聽起來像你。 Code First是一種吸引希望創建純粹的POCO清潔域模型的人的新方法。他們專注於代碼,而不是數據庫。

你可以嘗試所有三種。他們都有一個共同的基礎和一些額外的功能。

Code First在創建數據庫時會有相當多的選項。 Here你可以找到一些可以幫助你入門的信息。你看到你的數據庫每次被刪除和重新創建的原因是因爲數據庫初始化程序。您有幾個創建,重新創建和更新數據庫的選項。

在開發環境中,可能最容易在每次模型更改時刪除並創建數據庫。您還可以爲您的數據庫添加一些初始測試數據。在生產環境中,您將使用Code First Migrations在每個模型更改上遷移數據庫,以保存數據。

1

如果它確定兩個不相同,它將刪除所有表並且 重新創建它們。

默認情況下,您將收到一個異常。您必須明確指示您的應用程序刪除並重新創建數據庫。 我沒有EF代碼的第一次體驗(只有數據庫第一),但我不是在生產中丟棄和重新創建數據庫的粉絲。在開發過程中,這應該沒問題。

我該如何堅持我的數據?

使用Code First Migrations

更多鏈接:

EF 4.2 Code First Walkthrough

Entity Framework Homepage

1

代碼首先在默認情況下會簡單地拋出一個異常,如果你的模型不符合您的數據庫。這聽起來像你已經創建(並設置)「刪除或重新創建」初始化程序(IDatabaseInitializer),這導致數據庫的強制重新生成。您可以構建不同類型的初始值設定項,其中一個對EF 4.3.1是新增的,並允許db migration而不是刪除和重新創建。