2012-04-13 32 views
1

我想知道......之間的區別使用DbContext和不使用語句[代碼優先]有什麼區別?

using (var db = new PteDotNetContext()) 
      { 
       var blog = new Blog() { BlogType = 1, Title = "Blog 1", Description = TestInfo.UniqueRecordIdentifier, DateAdded = DateTime.Now, User = TestInfo.UniqueRecordIdentifier }; 
       db.Blogs.Add(blog); 
       db.SaveChanges(); 
      } 


      PteDotNetContext context2 = new PteDotNetContext(); 
      var blog2 = new Blog() { BlogType = 1, Title = "Blog 2", Description = TestInfo.UniqueRecordIdentifier, DateAdded = DateTime.Now, User = TestInfo.UniqueRecordIdentifier }; 
      context2.Blogs.Add(blog2); 
      context2.SaveChanges(); 

是什麼。我明白,使用using語句基本上調用對象上的析構函數。我只是想知道......

a)使用語句是否打開並關閉DbContext上的Sql連接? b)如果是這樣,第二個陳述會發生什麼,因爲我從來沒有真正打開它,它仍然有效。那麼我什麼時候結束這個聲明呢?

+1

您需要研究'IDisposable'。 – 2012-04-13 16:13:35

+0

並搜索「C#using」。但是,這可能是一個稍微涉及的問題。例如,*在LINQ2SQL *中,Dispose將關閉連接*當且僅當* * * *之前打開*。我不確定EF。 (所以請注意*使用'*的一般回覆!) – 2012-04-13 16:21:37

回答

3

a)使用語句是否打開並關閉DbContext的 上的Sql連接?

using語句中聲明的變量在使用塊結束時處置。在DbContext上,處理方法會關閉連接,所以只要該代碼塊結束,連接就會關閉。

b)如果是這樣,第二個陳述會發生什麼,因爲我從來沒有 實際上打開它,它仍然有效。那麼我何時關閉 聲明?

當不再需要上下文對象並且連接正在關閉時,垃圾收集器將清除上下文對象。

您應該閱讀約using statementIDisposable

+0

是的,但Connection會關閉嗎?在所有情況下? Dispose將在Context上調用,但Connection如何受到影響? – 2012-04-13 16:30:09

+0

根據MSDN的說法,並不總是這樣,Dispose關閉連接:'如果數據庫連接(DbConnection對象)是由此上下文創建的,或者在創建此上下文時將所有權傳遞給此上下文, 「。 – MarcinJuraszek 2012-04-13 16:32:25

+0

如果您使用的是默認設置(如果您不是:(),那麼您不會問這個問題。連接會發生什麼並不重要,請閱讀連接池。 – 2012-04-13 16:38:37

相關問題