簡単な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);
}
}
このコードは機能しますが、他の方法で記述する必要があると思います。最後のコード例では、コンテキストが長すぎる可能性があります。では、毎回「using」や「ToList()」を行わなくてもdbレコードを取得できるパターンはありますか?