初学 依赖式注 使用的是unity.mvc5 不知道 会不会主动 Dispose 释放数据库连接
依赖注入创建的对象 都是可以设置声明周期的,默认是 即时,用完释放,下次用又是新的。
怎么设置周期 是把上下文对象放在那个位置
@SpeakHero: 依赖注入 用ioc容器吧,用ioc容器设置。
像你的问题,Ef的实例不用管dispose,你知道啥时候dispose 好点呢,万一有延迟查询就报错。
如果 ef的实例成为了垃圾,GC回收时会触发析构函数,析构函数会触发dispose方法的。
你的数据库连接从unity容器里获取的?
不是
我写在basebll里面
@SpeakHero: 数据库连接是在数据访问层创建和释放的.业务层对象不会去管理数据库连接,也就不会有释放的问题.因为释放都是数据访问层做的
@吴瑞祥: 我在bll 里统一 数据连接
public DbContainer db = new DbContainer();
[Dependency]
public T Rep { get; set; }
public void Dispose()
{
if (db != null)
{
db.Dispose();
}
}
不知道 unity会不会主动调取 Dispose 方法
@SpeakHero: 你这个DbContainer是什么?是一个数据库连接吗?看你想unity容器注册逻辑层对象的时候指定的生命周期了
@吴瑞祥: DbContainer是ef的context对象
@SpeakHero: 那数据库连接一定会被释放,因为是由EF管理的,但是EF上下文不会释放,除非逻辑层对象被释放
@吴瑞祥: 看官方的文档说要手动 dispose 才能关闭数据库连接
@SpeakHero: 不会的,你new一个ef上下文并不会打开一个数据库连接.ef只在你你savachange的时候连接到数据库,并且肯定会自动关闭的.之所以要调用dispose是为了释放ef上下文而不是数据库连接.
ef上下文因为有二次缓存,所以不释放的话会越变越大,学习ef第一点就是学会管理上下文