在創建新實例DbContext
時,實體框架是否創建了新的到數據庫的連接?實體框架5 DbContext和連接
1
A
回答
1
同意DavidG,否它不會在此時創建連接。
連接只持續時調用SaveChanges()被調用
您entities
所做的任何更改,無論是updates, inserts or deletes
,只保存到數據庫時DbContext.SaveChanges()
方法被調用。如果在調用SaveChanges()
方法之前設置了一個DbContext
實例,則通過此DbContext
完成的inserts, updates or deletes
中的任何一個都將保留到數據存儲。
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();
}
相關問題
- 1. 實體框架4.3.1 DBContext連接
- 2. 實體框架5 - 擴展的DbContext類
- 3. 創建一個未連接的實體框架DbContext實體
- 4. 配置實體框架/ DbContext
- 5. C#實體框架DBContext
- 6. 實體框架和DbContext - 對象跟蹤
- 7. 實體框架左連接
- 8. 實體框架和數據庫連接
- 9. 實體框架和連接字符串
- 10. LINQ通用連接和實體框架
- 11. 實體框架5:創建
- 12. 實體框架的DbContext動態實例化與自定義連接字符串
- 13. 實體框架4.1的ObjectContext VS的DbContext
- 14. 實體框架DBContext全局緩存?
- 15. C#實體框架4.3的DbContext
- 16. 實體框架DbContext與查詢
- 17. 實體框架4.1僞造dbcontext
- 18. 實體框架 - 的DbContext平等
- 19. 使用實體框架的類庫DbContext
- 20. 阻止實體框架5查詢Information_Schema_Tables
- 21. 實體框架5:連接兩個字段
- 22. DbContext和連接池
- 23. 內連接和實體框架外連接選項4.0
- 24. 無法建立在實體框架5
- 25. 實體框架6左外連接
- 26. 循環中的實體框架連接
- 27. 實體框架中的連接表
- 28. 實體框架/ WCF連接順序
- 29. 實體框架核心連接管理
- 30. 左連接實體框架未運行
這可能有助於.. [的DbContext(http://mehdi.me/ambient-dbcontext-in-ef6/) –