EF Code First學習筆記 資料庫建立

2021-09-07 09:20:14 字數 2866 閱讀 3031

預設情況下,資料庫是建立在localhost\sqlexpress伺服器上,並且預設的資料庫名為命名空間+context類名,例如我們前面的breakaway.breakawaycontext。

有幾種方法可以改變這種預設約定。

在配置檔案中新加乙個連線字串

注意這裡連線字串名稱和我們的context類名相同,都為breakawaycontext。我們修改了一下預設的資料庫名,將breakaway.breakawaycontext

改為breakawayconfigfile。

我們在新增乙個連線字串

新建的連線串名稱和context類名不同了,所以我們要在breakawaycontext的建構函式中指名連線串的名稱:

dbcontext有乙個帶dbconnection過載的建構函式,說明我們也可以通過dbconnection來定位資料庫位置。我們也要先修改breakawaycontext的建構函式:

public breakawaycontext(dbconnection connection)

: base(connection, contextownsconnection: false)

呼叫:

code first的預設連線工廠是sqlconnectionfactory。此連線工廠將使用sql client(system.data.sqlclient的)資料庫引擎連線到資料庫。預設的行為,將選擇在localhost\ sqlexpress建立資料庫,並使用上下文型別的完全限定名作為資料庫的名稱。

我們可以通過指定的連線字串段,來覆寫預設規則。

ps:用這個方法好像沒辦法指定資料庫名,預設名稱為context類的完全限定名。

初始化包括兩個主要步驟。首先,使用code first在記憶體中根據預設規則和配置建立模型。其次,使用已設定的資料庫初始化器將用於儲存資料的資料庫初始化。

初始化是延遲載入的,所以建立乙個例項的是不完全滿足初始化發生的條件的。必須執行對模型的操作,如查詢或新增實體才會發生。

但我們可以可以呼叫dbcontext.database.initialize方法,在沒有對模型執行任何操作的時候強制初始化。

using (var context = new breakawaycontext())

有三個方法可以控制資料庫初始化時的行為。

1 createdatabaseifnotexists

createdatabaseifnotexists方法會在沒有資料庫時建立乙個,這是預設行為。

database.setinitializer( 

new createdatabaseifnotexists

());

using (var context = new breakawaycontext())

2 dropcreatedatabaseifmodelchanges

如果我們在在模型改變時,自動重新建立乙個新的資料庫,就可以用這個方法。在這開發過程中非常有用。

database.setinitializer(

new dropcreatedatabaseifmodelchanges

());

using (var context = new breakawaycontext())

3 dropcreatedatabasealways

如果你想在每次執行時都重新生成資料庫就可以用這個方法。

database.setinitializer(

new dropcreatedatabasealways

());

using (var context = new breakawaycontext())

EF CodeFirst學習筆記1

一直使用ef的dbfirst沒使用過codefirst,而且codefirst使用的人又多,雖然麻煩點但是還是要學下的。來寫個一使用的入門教程 新建乙個codefirst的demo,需引入entityframework 然後簡單建立一模型 這邊以table特性命名emp,預設如果不加此特性約定是以s...

EF Code First 學習筆記 約定配置

要更改ef中的預設配置有兩個方法,乙個是用data annotations 在命名空間system.componentmodel.dataannotations 直接作用於類的屬性上面 還有乙個就是fluent api,通過新增相應的配置類來覆蓋預設配置。現在我們用這兩個來對比了解ef中的約定配置。...

EF Code First 學習筆記 約定配置

要更改ef中的預設配置有兩個方法,乙個是用data annotations 在命名空間system.componentmodel.dataannotations 直接作用於類的屬性上面 還有乙個就是fluent api,通過新增相應的配置類來覆蓋預設配置。現在我們用這兩個來對比了解ef中的約定配置。...