Automapper + EF4 + ASP.NET MVC -возникает ошибка «контекст удален» (Я знаю почему, но как это исправить?)

У меня есть этот действительно простой код в действии контроллера MVC. Он отображает класс модели Operationв очень простой OperationVMвид -класс модели.

public class OperationVM: Operation 
{
    public CategoryVM CategoryVM { get; set; }
}

Мне нужно загрузить полный список категорий, чтобы создать экземпляр CategoryVM.
Вот как я (пытаюсь )создать List<OperationVM>для отображения в представлении.

public class OperationsController : Controller {

    private SomeContext context = new SomeContext ();

    public ViewResult Index()
    {
        var ops = context.Operations.Include("blah...").ToList();
        Mapper.CreateMap<Operation, OperationVM>()
           .ForMember(
                dest => dest.CategoryVM, 
                opt => opt.MapFrom(
                    src => CreateCatVM(src.Category, context.Categories)
                    //  trouble here ----------------^^^^^^^
                )
            );
        var opVMs = ops.Select(op => Mapper.Map<Operation, OperationVM>(op))
                      .ToList();

        return View(opVMs);
    }
}

Все работает отлично в первый раз, когда я попал на страницу. Проблема в том, что объект сопоставления является статическим. Таким образом, при вызове Mapper.CreateMap()экземпляр текущего DbContextсохраняется в замыкании, переданном CreateMap ().

Во второй раз, когда я попал на страницу, статическая карта уже на месте, все еще используя ссылку на начальную, теперь удаленную, DbContext.

Точная ошибка:

The operation cannot be completed because the DbContext has been disposed.

Вопрос в следующем: :Как я могу заставить AutoMapper всегда использовать текущий контекст вместо исходного?

Есть ли способ использовать «экземпляр» automapper вместо статического класса Mapper? Если это возможно, рекомендуется ли каждый раз -заново создавать сопоставление? Меня беспокоят медленные -спады отражения.

Я немного читал о пользовательских распознавателях, но столкнулся с похожей проблемой -Как заставить пользовательский распознаватель использовать текущий контекст?

6
задан Cristi Diaconescu 1 August 2012 в 21:25
поделиться