預設情況下,資料庫是建立在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())
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 在頁面呼叫時如果通過時間來查詢,請記住一定要這樣寫 ...