使用和不使用带有DbContext [代码优先]的语句有什么区别?

时间:2012-04-13 16:11:58

标签: entity-framework ef-code-first idisposable

我想知道...之间有什么区别。

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)是否打开using语句然后关闭DbContext上的Sql连接? b)如果是这样,第二个语句会发生什么,因为我从未真正打开过它,它仍然有效。那么什么时候关闭声明?

1 个答案:

答案 0 :(得分:3)

  

a)打开using语句然后关闭Sql连接   DbContext?

当使用块结束时,在using语句中声明的变量是Disposed。在DbContext上,处理方法关闭连接,因此只要该代码块结束,连接就会关闭。

  

b)如果是这样,第二个陈述会发生什么,因为我永远不会   实际打开它,它仍然有效。所以我什么时候关闭   声明?

垃圾收集器在不再需要上下文对象时清除它,然后关闭连接。

您应该阅读using statementIDisposable