我有一个简单的 MagazineRepository 类
public class MagazineRepository : IDisposable
{
//EntityFramewokr context
private DataBaseContext _context;
public MagazineRepository()
{
_context = new DataBaseContext();
}
public void Dispose()
{
if (_context != null)
{
_context.Dispose();
}
GC.SuppressFinalize(this);
}
}
还有一个简单的控制器:
public class MagazineController : Controller
{
public ActionResult Index()
{
//Should to implement using to dispose
using(MagazineRepository magazineRepository = new MagazineRepository())
{
var magazine = magazineRepository.GetAll().ToList(); //Should use ToList() to avoid "Object has been disposed exception".
return View(magazine);
}
}
}
如果我不想在每个动作中使用“using”和“ToList()”怎么办?如果我在控制器的析构函数中调用 Dispose() 上下文方法怎么办?像这样的东西:
public class MagazineController : Controller
{
MagazineRepository _magazineRepository;
public MagazineController()
{
_magazineRepository= new MagazineRepository();
}
~MagazineRepository();
{
if(_magazineRepository!=null)
{
_magazineRepository.Dispose();
}
}
public ActionResult Index()
{
var magazine = magazineRepository.GetAll();
return View(magazine);
}
}
这段代码有效,但我认为它应该以其他方式编写。在最后一个代码示例中,上下文能够存活太久。那么有没有什么模式可以给我我的数据库记录而无需每次都“使用”和“ToList()”?