2012-04-13 61 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

相关问题