2016-07-29 123 views

回答

1

同意DavidG,它不會在此時創建連接。

連接只持續時調用SaveChanges()被調用

entities所做的任何更改,無論是updates, inserts or deletes,只保存到數據庫時DbContext.SaveChanges()方法被調用。如果在調用SaveChanges()方法之前設置了一個DbContext實例,則通過此DbContext完成的inserts, updates or deletes中的任何一個都將保留到數據存儲。

+0

這不完全正確,我會在一分鐘內添加一個答案... – DavidG

+0

會很棒.. !! –

+0

希望有助於:) – DavidG

1

所以採取這種代碼爲例:

var context = new MyContext(); 
var cars = context.Cars.Where(c => c.TopSpeed > 100); 
var carList = cars.ToList(); //Connection will probably happen here 

哪裏是連接啓動?實際上有兩種可能性。通常只會在最後一行創建連接。實例化上下文沒有任何副作用,中間線使用延遲執行,因此不需要連接。

但是,您可能會發現第二行會導致創建連接,這將在您的應用第一次啓動並且Entity Framework需要啓動並確認您的數據庫與其認爲應該匹配時發生是。您可以通過禁用初始化程序來禁用此功能,例如:

Database.SetInitializer<MyContext>(null); 

如何寫入數據庫?那麼,你必須要對類似的東西,但此時需要一個連接的唯一時間是當你調用SaveChanges

var context = new MyContext(); 
var ferarri = new Car { Name = "Ferarri", TopSpeed = 170 }; 
context.Cars.Add(ferarri); 
context.SaveChanges(); //Connection will probably happen here 

是這樣嗎?哦,不,你還會當你開始交易得到一個新的連接:

//Database connection will be opened here 
using (var transaction = context.Database.BeginTransaction()) 
{ 
    var cars = context.Cars.Where(c => c.TopSpeed > 100); 
    var carList = cars.ToList();   
}