原文地址:http://www.entityframeworktutorial.net/code-first/database-initialization-in-code-first.aspx 在本系列教程的Code-First示例一節中,我們已經看到了EF 自動創建資料庫的過程。這一節中,我們將 ...
原文地址:http://www.entityframeworktutorial.net/code-first/database-initialization-in-code-first.aspx
在本系列教程的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" 包含在連接字元串中。
好了,這一節就介紹完了,下麵一節,將介紹資料庫初始化策略。