EntityFramework 資料庫建立

2021-09-07 05:53:38 字數 2866 閱讀 7815

預設情況下,資料庫是建立在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())

Entity Framework 架構簡介

當微軟的wcf 大行其道,通用資料訪問模型entity framework卻稍遜一籌,有很多需要完善和進步的地方,本文對entity framework 架構做一下簡介。實體框架 entitry framework 以下簡稱ef 看起來像乙個有趣的技術,更強大,比linq to sql 更先進。這兩...

entity framework 批量刪除

以前用sql寫批量刪除的時候,感覺挺利索的,簡潔地寫了 public bool delectusersuggest string addsql 然後在頁面層直接呼叫 現在用entity framework,感覺有點麻煩不能直接delete,還要先把資料查出來,以下是主要 1 先查出實體 region...

Entity Framework 動態查詢

不想多說什麼直接說 region 搜尋並分頁 ljy 傳入搜尋條件,當前頁碼,每頁的顯示的條數,資料的總數 輸出引數 三個引數,返回 商實體 搜尋條件 當前頁碼 每頁的顯示的條數 資料的總數 public iqueryable endregion 在頁面呼叫時如果通過時間來查詢,請記住一定要這樣寫 ...