2016-09-24 12 views
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」を削除すると、クエリは、例外なく実行されます。

答えて

0

スキップを(置くようにしてください)&テイク()投影後:

var list = _dbContext.ForumPostFavorites 
    .Where(e => e.UserId == userId) 
    .Select(e => e.ForumPost) 
    .Select(e => new ForumPostFavoriteVm 
    { 
     ForumPostId = e.ForumPostId, 
     ForumTopicId = e.ForumTopicId, 
     Message = e.Message, 
     Subject = e.ForumTopic.Subject, 
    }) 
    .Take(10) 
    .ToList(); 
関連する問題