預設情況下,資料庫是建立在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(2 dropcreatedatabaseifmodelchangesnew createdatabaseifnotexists
());
using (var context = new breakawaycontext())
如果我們在在模型改變時,自動重新建立乙個新的資料庫,就可以用這個方法。在這開發過程中非常有用。
database.setinitializer(3 dropcreatedatabasealwaysnew dropcreatedatabaseifmodelchanges
());
using (var context = new breakawaycontext())
如果你想在每次執行時都重新生成資料庫就可以用這個方法。
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中的約定配置。...