1
私は各トピックに多数の投稿があり、各投稿は複数のユーザーが好きかもしれない簡単なフォーラムアプリケーションを持っています。アプリケーションのエンティティモデルは次のとおりです。Entity Frameworkコアのこのオブジェクト「オブジェクトの現在の状態のために操作が有効でない」がなぜ発生するのですか?
public class ForumTopic
{
public int ForumTopicId { get; set; }
public string Subject { get; set; }
public string UserId { get; set; }
public virtual User User { get; set; }
public virtual ICollection<ForumPost> ForumPosts { get; set; }
}
public class ForumPost
{
public int ForumPostId { get; set; }
public string Message { get; set; }
public int ForumTopicId { get; set; }
public virtual ForumTopic ForumTopic { get; set; }
public string UserId { get; set; }
public virtual User User { get; set; }
public virtual ICollection<ForumPostFavorite> ForumPostFavorites { get; set; }
}
public class ForumPostFavorite
{
public string UserId { get; set; }
public User User { get; set; }
public int ForumPostId { get; set; }
public ForumPost ForumPost { get; set; }
}
次のように現在のユーザーのお気に入りの投稿を取りたいとします。この問合せは、「操作がオブジェクトの現在の状態のため有効ではありません」例外をスローします。このクエリはエンティティフレームワーク6で例外なく実行されると確信していますが、この例外はEntity Frameworkコアで発生します。
public IActionResult Favorite()
{
var userId = _userManager.GetUserId(User);
var list = _dbContext.ForumPostFavorites
.Where(e => e.UserId == userId)
.Select(e => e.ForumPost)
.Take(10)
.Select(e => new ForumPostFavoriteVm
{
ForumPostId = e.ForumPostId,
ForumTopicId = e.ForumTopicId,
Message = e.Message,
Subject = e.ForumTopic.Subject,
}).ToList();
return View(list);
}
私は、クエリからこのライン「件名= e.ForumTopic.Subject」を削除すると、クエリは、例外なく実行されます。