首页 新闻 会员 周边

使用EF和Repository模式,在Repository类的方法中需不需要释放dbcontext?

0
悬赏园豆:20 [已解决问题] 解决于 2014-04-10 16:17

比如说在我的Repository类中有一个插入的方法

public bool InsertStudentInfo(Student s)
{
    try
    {
        dbContext.Students.Add(s);
        dbContext.SaveChanges();
        return true;
    }
    catch(DataException ex)
    {
        log.Error("Data Insertion Error!", ex);
        return false;
    }
    finally
    {
        dbContext.Dispose(); // 这里的语句是否会执行?是否需要执行?
    }
}

不论是正常执行还是出现异常,最后都有返回值,那么在返回以后finally语句块还会执行吗?或者说需要在单个操作的方法中就把dbContext给释放掉吗?

飞鸟_Asuka的主页 飞鸟_Asuka | 菜鸟二级 | 园豆:209
提问于:2014-04-03 10:10
< >
分享
最佳答案
0

finally 都会执行,不用释放

收获园豆:20
Qlin | 老鸟四级 |园豆:2403 | 2014-04-03 10:16

也就是说其实这里不用写finally语句块是吗

飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2014-04-03 10:20

@飞鸟_Asuka: 是的

Qlin | 园豆:2403 (老鸟四级) | 2014-04-03 10:34

@Qlin: 那么dbContext的释放在什么时候进行呢

飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2014-04-03 10:37

@飞鸟_Asuka: 

每次 调用savechange,都会进行检查dbContext 的连接数,进行减1,如果连接数为0了,就释放数据库连接,具体看 源码。

Qlin | 园豆:2403 (老鸟四级) | 2014-04-03 10:46

@Qlin: 那么就不需要在程序中手动释放了?由dbContext自己释放?

飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2014-04-03 10:50
其他回答(1)
0

dbContext.SaveChanges();

这一句执行后,DBContext自己就关闭并释放链接了。这是EF的机制

熊仔其人 | 园豆:212 (菜鸟二级) | 2016-01-13 10:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册