比如说在我的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给释放掉吗?
finally 都会执行,不用释放
也就是说其实这里不用写finally语句块是吗
@飞鸟_Asuka: 是的
@Qlin: 那么dbContext的释放在什么时候进行呢
@飞鸟_Asuka:
每次 调用savechange,都会进行检查dbContext 的连接数,进行减1,如果连接数为0了,就释放数据库连接,具体看 源码。
@Qlin: 那么就不需要在程序中手动释放了?由dbContext自己释放?
dbContext.SaveChanges();
这一句执行后,DBContext自己就关闭并释放链接了。这是EF的机制