EF Codefirst學習系列一:生成數據庫數據庫連接字符串


1、寫在前兩

最近發現,學習這件事,最好還是邊學邊寫更好,俗話真沒騙我們,好記性不如爛筆頭,所以決定開始寫博客,希望自己能堅持吧

2、開搞

EF在codefirst模式下能自動生成數據庫,那它是如何生成的呢,默認情況下如何生成的呢?先來看看用來生成數據庫的DbContext類吧

1 protected DbContext();
2         protected DbContext(DbCompiledModel model);
3         public DbContext(string nameOrConnectionString);
4         public DbContext(DbConnection existingConnection, bool contextOwnsConnection);
5         public DbContext(ObjectContext objectContext, bool dbContextOwnsObjectContext);
6         public DbContext(string nameOrConnectionString, DbCompiledModel model);
7         public DbContext(DbConnection existingConnection, DbCompiledModel model, bool contextOwnsConnection);
View Code

可以看到各個構造函數,變量名也挺清楚,一般咱們用第三個構造函數,給其傳遞連接字符串名,假設為ABC,EF會自動到配置文件里面Connections標簽下找name叫ABC的標簽,再找到里面所設置的connectionString。根據這個連接字符串連接到數據庫管理器生成數據庫,如果連接字符串沒問題那么數據庫就這么Duang~的一下生成了,至於表也會根據model自動生成的,都無需咱們操心。

當然上面是基於你配置了連接字符串且沒問題的情況下,那么問題來了,不是挖掘機哪家強,也不是哪家炒菜香,而是如果你沒有配置字符串或者你配置了字符串但是你傳遞的名字不對時EF是怎么處理的呢?

廢話不多說,直接調試,在Global.asax中的Application_Start方法中添加如下代碼,進行初始化,不然即使添加了DbContext類不通知程序,EF也不知道咱們要建數據庫的,代碼如下:

new EFDbContext().Database.Initialize(true);

這次我雖然在配置文件里面配置了字符串,但是我故意傳遞了一個錯誤的字符串(任性的人生無需解釋),下圖是提取出來的EF的用於生產數據庫的連接字符串,可以看到是用本地默認實例,采用Windows身份驗證方式連接的,如果你本地有這個實例且有建庫權限,那就根據你傳遞的字符串作為數據庫名建庫了。。。。。

當然,如果你寫的字符串沒問題,那就一切OK,EF完全按着你的意思走,讀你的連接字符串,以你設置的方式進行數據庫驗證,以你的設置建庫,一切水到渠成~

然而EF為什么會這么做呢,菜逼的我也模仿大神們想看下源碼,然而終究是菜逼,沒找到上具體的建庫代碼,但是看了咱們使用的DbContext構造方法后我確定我上面的猜測是正確的:

public DbContext(string nameOrConnectionString);

nameOrConnection:名稱或者連接字符串,名稱自然是數據庫名了,即內部判斷非連接字符串后會將參數作為數據庫名來處理。

3、總結

EF還是比較強大的吧,好吃不好吃都接受,但是你給它個磚頭那它真沒本事吃下去,雖然默認能創建,不過為了避免出錯建議還是自己配置連接字符串,因為畢竟自己寫的才是最有把握控制的不是么。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM