【发布时间】:2015-07-20 12:39:27
【问题描述】:
我已经看到了 EF7 人员在构造函数中注入数据上下文的示例。
但是,由于 DbContext 实现了 IDisposable,我担心我的存储库也必须实现 IDisposable,通过代码进行传播。
我看到的例子没有实现 IDisposable,但我不知道为什么。
编辑
澄清 以前我以通常的方式使用数据库上下文
using(var db = new SomeContext())
{
return await from row in db.Table
select row).ToListAsync();
}
查看 DbContext 将被传递到存储库构造函数的注入方式,但是一旦存储库完成,此存储库是否必须实现 IDisposable 来处置 DbContext?
如果存储库随后调用另一个存储库类来更改其注入的 DbContext,则此 DBContext 是否存在风险?
即
public SomeOtherRepository (SomeContext db)
{
this.db = db;
}
*
public SomeRepository (SomeOtherRepository repo, SomeContext db)
{
this.repo = repo;
this.db = db;
}
public async TaskAdd(Row row)
{
db.Some.Add(row);
await db.SaveChangesAsync();
repo.AddSomethingElse(row.Id);
}
【问题讨论】:
-
我认为 DI 处理对象的生命周期由 DI 容器本身处理。在某些情况下,一个单例对象根本不会被释放