Я следил за ответом Дарина на вопрос, который у меня возник при похудении моих контроллеров, и у меня возникают проблемы с этим IEntityChangeTracker
исключением:
AnНа объект сущности нельзя ссылаться несколькими экземплярами IEntityChangeTracker.
Вот мой механизм связывания модели:
public class PostModelBinder : IModelBinder
{
private readonly IPostRepository _repository;
public PostModelBinder(IPostRepository repository)
{
_repository = repository;
}
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
var postIDValue = controllerContext.Controller.ValueProvider.GetValue("postID");
int postID;
if (postIDValue == null || !int.TryParse(postIDValue.AttemptedValue, out postID))
return null;
return _repository.FindPost(postID, filterByPublished: true);
}
}
После этого мой фильтр настраиваемых действий просто выполняет небольшую проверку насообщение и перенаправляет, если сообщение не является действительным.До этого момента все хорошо.Ошибка происходит в моем контроллере, когда я пытаюсь обновить количество прочитанных сообщений:
public class PostsController : Controller
{
private IPostRepository postRepository;
// snip...
[AutoMap(typeof(Post), typeof(PostViewModel)), HttpGet]
[PostActionFilter]
public ActionResult ShowPost(Post model)
{
postRepository.PostVisited(model);
return View(model);
}
}
Я понимаю, что жалоба IEntityChangeTracker
связана с тем, что я фактически получаю 2 репозитория, ссылающихся на один и тот же объект, и это простоплохой моджо, ожидающий случиться.Я знаю, что мог бы вставить вызов PostVisited()
в PostModelBinder
, но обновление модели не похоже на поведение, которое здесь относится.
Есть ли другой способ обойти это?
Спасибо.