Я бы порекомендовал вам использовать ViewModels и передавать только виды моделей в представления.Таким образом, вам не нужно беспокоиться об утилизации.Также абстрагируйте и разделите ваш доступ к данным в репозитории:
public interface IPersonRepository
{
IEnumerable<Person> GetPeople();
}
public class PersonRepositorySql : IPersonRepository, IDisposable
{
private MyObjectContext _db = new MyObjectContext();
public IEnumerable<Person> GetPeople()
{
return _db.People;
}
public void Dispose()
{
_db.Dispose();
}
}
public class HomeController : Controller
{
private readonly IPersonRepository _repository;
public HomeController(IPersonRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
IEnumerable<Person> people = _repository.GetPeople();
// Using AutoMapper here but could be anything:
IEnumerable<PersonViewModel> peopleViewModel = Mapper
.Map<Person, PersonViewModel>(people);
return View(peopleViewModel);
}
}
Теперь утилизация репозитория является задачей его создателя, который, если вы следуете передовым методам, является структурой внедрения зависимости.Чтобы создать экземпляр вашего контроллера, вам нужно передать экземпляр репозитория в конструктор, и большинство хороших DI-фреймворков будут автоматически располагать объекты, которые реализуют IDisposable
.