ダーリンのanswerに私のコントローラをスリミングさせた質問に私は従っていましたが、この問題に遭遇していますIEntityChangeTracker
例外:"IEntityChangeTrackerの複数のインスタンスでエンティティオブジェクトを参照することはできません"
エンティティオブジェクトは、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);
}
}
私は効果的に同じオブジェクトを参照する2つのリポジトリで終わるだけに待っている悪いモジョのように思えることをするので、私は文句IEntityChangeTracker
年代を理解する:私は、カウントを読んで記事を更新しようとすると、エラーが私のコントローラで発生します起こる。 PostVisited()
コールをPostModelBinder
にプッシュすることはできますが、モデルを更新することはそこに属する動作のようには見えません。
別の方法がありますか?
ありがとうございます。
奇妙なことに、なぜHttpGetアクションにリダイレクトするのではなく(Show/Redirect/Get pattern?)、これを正しく読んでいますか?ShowPostに投稿していますが、HttpGetを指定してから、 –
@AdamTuliper ShowPostは私のPostsController内にブログ投稿を表示しています。それはHttpPostを処理していません。 –