最近用EF做了幾個小東西,瞭解簡單使用後有了深入研究的興趣,所以想系統的研究一下EF CodeFist的幾個要點。下麵簡單列一下目錄 1.1 目錄 1. 資料庫初始化策略和數據遷移Migration的簡單介紹 3. 配置一對一關係 4. 配置一對多關係 5. 配置多對多關係 6. 開發環境配置Mig ...
最近用EF做了幾個小東西,瞭解簡單使用後有了深入研究的興趣,所以想系統的研究一下EF CodeFist的幾個要點。下麵簡單列一下目錄
1.1 目錄
- 資料庫初始化策略和數據遷移Migration的簡單介紹
- 配置一對一關係
- 配置一對多關係
- 配置多對多關係
- 開發環境配置Migration最佳實踐和生產環境配置Migration最佳實踐
2.1 資料庫初始化策略
在**http://www.entityframeworktutorial.net**這個網站中,我找到相關資料庫初始化的策略
2.1.1有四種不同的資料庫初始化策略:
- CreateDatabaseIfNotExists:這是預設的初始化程式。顧名思義,如果每個配置都不存在,它將創建資料庫。但是,如果更改模型類,然後使用此初始化器運行應用程式,則會引發異常。
- DropCreateDatabaseIfModelChanges:如果您的模型類(實體類)已更改,則此初始化程式將刪除現有資料庫並創建新資料庫。所以,當模型類更改時,您不必擔心維護資料庫模式。
- DropCreateDatabaseAlways:顧名思義,這個初始化器每次運行應用程式時都會丟棄一個現有的資料庫,而不管你的模型類是否已經改變。當您每次運行應用程式時都需要新的資料庫時,例如在開發應用程式時,這會很有用。
- 自定義資料庫初始化程式:如果上述內容不滿足您的要求,或者您想要使用上述初始化程式初始化資料庫,您也可以創建自己的自定義初始化程式。
還有一種在列表中沒有體現,就是MigrateDatabaseToLatestVersion ,在配置自動化遷移(Automated Migration)中會使用。
如果要取消資料庫初始化策略,代碼為:
Database.SetInitializer
2.1.2定義資料庫初始化程式的示例代碼如下所示:
public class SchoolDBInitializer : CreateDatabaseIfNotExists<SchoolDBContext>
{
protected override void Seed(SchoolDBContext context)
{
base.Seed(context);
}
}
註意其實是有繼承關係的。
按照官方的說法:This separates the database initialization code from a context class.--這將資料庫初始化的代碼從context中分離出來
2.1.3 在配置文件中設置資料庫初始化策略
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="DatabaseInitializerForType SchoolDataLayer.SchoolDBContext, SchoolDataLayer"
value="SchoolDataLayer.SchoolDBInitializer, SchoolDataLayer" />
</appSettings>
</configuration>
key的結構為 DatabaseInitializerForType{namespace}.{className},value 同理。
如果要配置取消資料庫初始化策略,value=“Disabled” 即可。