Как правильно расположить Linq to SQL DataContext в репозитории? - PullRequest
4 голосов
/ 01 марта 2010

В приложении ASP.NET MVC в стиле Rob Conery у вас обычно есть хранилище:

public class CustomerRepository
{
    DataContext dc = new DataContext();

    public IQueryable<Customer> AllCustomers()
    {
        return db.Customers;
    }

    public Customer GetCustomer(int customerID)
    {
        return db.Customers.FirstOrDefault(c => c.CustomerID = customerID);
    }
}

и контроллер:

public class CustomerController: Controller
{
    CustomerRepository _repository;

    public ActionResult Index()
    {
        var data = _repository.AllCustomers();
        return view("Index", data);
    }

    public ActionResult Details(int id)
    {
        var data = _repository.GetCustomer(id);
        if (data !=null)
            return view("Details", data);
        else
            return view("NotFound");
    }
}

Контроллер создается посредством фабрики Controller в ядре ASP.NET MVC, когда запрос направляется ему через механизм маршрутизации. Затем он выполняет соответствующий метод на контроллере.

Предполагая, что я хочу реализовать IDisposable в DataContext, как правильно Dispose DataContext без необходимости повторной обработки DataContext для каждого метода в хранилище?

Ответы [ 2 ]

4 голосов
/ 01 марта 2010

сделать хранилище одноразовым и утилизировать текст данных в его методе Dispose.

Если вам интересно, кто распоряжается репо, Роб, вероятно, будет использовать контейнер IOC, который будет вводить репо в контроллер с экземпляром для каждого запроса и будет автоматически удалять репо в конце запроса.

1 голос
/ 01 марта 2010

на самом деле DataContext - это IDisposable. Вы должны обернуть каждое действие в контроллере в using(CustomerRepository _repository = new CustomerRepository()) { ... } и реализовать IDisposable в хранилище, просто вызвав ds.Dispose()

...