原文地址:http://www.entityframeworktutorial.net/code-first/database-initialization-in-code-first.aspx
EF 6 Code-First系列文章目錄:
- 1 翻譯系列:什么是Code First(EF 6 Code First 系列)
- 2.翻譯系列:為EF Code-First設置開發環境(EF 6 Code-First系列)
- 3.翻譯系列:EF Code-First 示例(EF 6 Code-First系列)
- 4.翻譯系列:EF 6 Code-First默認約定(EF 6 Code-First系列)
- 5.翻譯系列:EF 6中數據庫的初始化(EF 6 Code-First 系列)
- 6.翻譯系列:EF 6 Code-First中數據庫初始化策略(EF 6 Code-First系列
- 7.翻譯系列:EF 6中的繼承策略(EF 6 Code-First 系列)
- 8.翻譯系列: EF 6中配置領域類(EF 6 Code-First 系列)
- 9.翻譯系列:EF 6以及EF Core中的數據注解特性(EF 6 Code-First系列)
- 9.1 翻譯系列:數據注解特性之----Table【EF 6 Code-First 系列】
- 9.2 翻譯系列:數據注解特性之---Column【EF 6 Code First系列】
- 9.3 翻譯系列:數據注解特性之Key【EF 6 Code-First 系列】
- 9.4 翻譯系列:EF 6以及 EF Core中的NotMapped特性(EF 6 Code-First系列)
- 9.5 翻譯系列:數據注解之ForeignKey特性【EF 6 Code-First系列】
- 9.6 翻譯系列:數據注解之Index特性【EF 6 Code-First系列】
- 9.7 翻譯系列:EF數據注解特性之--InverseProperty【EF 6 Code-First系列】
- 9.8 翻譯系列:數據注解特性之--Required 【EF 6 Code-First系列】
- 9.9 翻譯系列:數據注解特性之--MaxLength 【EF 6 Code-First系列】
- 9.10 翻譯系列:EF數據注解特性之StringLength【EF 6 Code-First系列】
- 9.11 翻譯系列:數據注解特性之--Timestamp【EF 6 Code-First系列】
- 9.12 翻譯系列:數據注解特性之ConcurrencyCheck【EF 6 Code-First系列】
- 10.翻譯系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
- 10.1.翻譯系列:EF 6中的實體映射【EF 6 Code-First系列】
- 10.2.翻譯系列:使用Fluent API進行屬性映射【EF 6 Code-First】
- 11.翻譯系列:在EF 6中配置一對零或者一對一的關系【EF 6 Code-First系列】
- 12.翻譯系列:EF 6 中配置一對多的關系【EF 6 Code-First系列】
- 13.翻譯系列:Code-First方式配置多對多關系【EF 6 Code-First系列】
- 14.翻譯系列:從已經存在的數據庫中生成上下文類和實體類【EF 6 Code-First系列】
- 15.翻譯系列:EF 6中的級聯刪除【EF 6 Code-First 系列】
- 16.翻譯系列:EF 6 Code -First中使用存儲過程【EF 6 Code-First系列】
- 17.翻譯系列:將Fluent API的配置遷移到單獨的類中【EF 6 Code-First系列】
- 18.翻譯系列:EF 6 Code-First 中的Seed Data(種子數據或原始測試數據)【EF 6 Code-First系列】
- 19.翻譯系列:EF 6中定義自定義的約定【EF 6 Code-First約定】
- 20.翻譯系列:Code-First中的數據庫遷移技術【EF 6 Code-First系列】
- 20.1翻譯系列:EF 6中自動數據遷移技術【EF 6 Code-First系列】
- 20.2.翻譯系列:EF 6中基於代碼的數據庫遷移技術【EF 6 Code-First系列】
- 21.翻譯系列:Entity Framework 6 Power Tools【EF 6 Code-First系列】
在本系列教程的Code-First示例一節中,我們已經看到了EF 自動創建數據庫的過程。這一節中,我們將學習Code-First模式中,初始化數據庫的時候, EF是如何決定創建的數據庫名稱,以及在哪個服務器上創建數據庫。
下面的圖形,列出來了數據庫初始化的流程,從圖中可以看出,流程走向是基於我們傳遞給上下文類【繼承自DbContext類】的參數的。
就像上圖所示,基於上下文的參數,我們有下面幾種:
- No Parameter【沒有參數】
- Database Name【數據庫名稱】
- Connection String Name 【連接字符串名稱】
先看下沒有參數的情況吧:
如果你在上下文類中,沒有指定任何參數的話,就會在你本地的 SQLEXPRESS 服務器上創建數據庫,數據庫名稱是:{Namespace}.{Context clas Name}.【命名空間.上下文類的名稱】,例如下面的代碼,EF將會創建SchoolDataLayer.Context名稱的數據庫。
接着看看 第二種情況:數據庫名稱
你可以在上下文類調用的base構造函數中,傳入數據庫名稱參數,然后EF就會創建你指定的數據庫名稱的數據庫。例如下面代碼,EF為我們創建的是MySchoolDB數據庫。
最后看看第三種情況:數據庫連接字符串的名稱吧。
你可以在app.config配置文件中,配置數據庫連接字符串,然后把配置文件中連接字符串的名稱,傳遞到上下文類的base構造函數中。形式如下:“name=你的連接字符串名稱”。下面的代碼,我們傳遞的是:
在上面的上下文類中,我們指定了一個連接字符串作為參數。請注意的是,連接字符串應該是【name=】開頭,否則就被被認為是數據庫的名稱,上面配置文件中數據庫是SchoolDB-ByConnectionString。EF就會為我們創建這個名稱的數據庫。請注意,你需要確保
providerName = "System.Data.SqlClient" 包含在連接字符串中。
好了,這一節就介紹完了,下面一節,將介紹數據庫初始化策略。