의견 기능을 작업 중입니다. 스레드에 주석을 달 수 있습니다. 또한 댓글에 댓글을 쓸 수도 있습니다. 그래서 스레드 주석의 목록을 가지고 있으며, 모든 댓글은 댓글 목록이 : 내가 가진코드 첫 번째 Entity Framework - 주석 기능에 대한 주석, 두 번째 동일한 주석 표시
public class Thread
{
public int ThreadId { get; set; }
public int PostId { get; set; }
public virtual List<Comment> Comments { get; set; }
}
public class Comment
{
public int CommentId { get; set; }
[MaxLength(280)]
public string Content { get; set; }
public long time { get; set; } // unix time/epoch time
[JsonIgnore]
[IgnoreDataMember]
public string user_id { get; set; }
public virtual CommentUser CommentUser { get; set; }
[JsonIgnore]
[IgnoreDataMember]
public int ThreadId { get; set; }
[JsonIgnore]
[IgnoreDataMember]
public virtual Thread Thread { get; set; }
public virtual List<Comment> Comments { get; set; }
}
문제는 내가 스레드에 대해 언급 때 그 의견에 대한 언급이다. 총 2 가지 의견.
나는 세 가지 의견이 JSON을 얻을 :
스레드를 얻는 방법은 매우 간단합니다 :
{
"ThreadId": 3,
"Comments": [
{
"Comments": [
{
"Comments": [],
"CommentUser": {
"user_id": "123",
"nickname": "user",
},
"CommentId": 52,
"Content": "comment on comment",
"time": 1513784459
}
],
"CommentUser": {
"user_id": "123",
"nickname": "user",
},
"CommentId": 51,
"Content": "asdf asdf asd f",
"time": 1513784447
},
{
// THIS COMMENT SHOULD NOT SHOW UP HERE
"Comments": [],
"CommentUser": {
"user_id": "123",
"nickname": "user",
},
"CommentId": 52,
"Content": "comment on comment",
"time": 1513784459
}
]
}
이는 DB가 보이는 두 의견 방법입니다 :
Thread commentThread = await (from t in db.Thread where t.PostId == tr.postId select t).FirstOrDefaultAsync();
return Json(commentThread);
나는 어디에서 t 그의 잘못된다. 어떤 도움을 주셔서 감사합니다! Comment
엔티티에 관계없이 수준의 소유자 Thread
와 (필수) 직접적인 관계를 가지고 있기 때문에 자신의 의견에 @Ivan & @Olivier 언급으로
"주석에 대한 주석"은 두 번 나타납니다. 왜냐하면 그것은'Thread.Comments'와'Comment.Comments'의 일부이기 때문입니다. 그것은 당신의 모델에서의 정상적인 행동입니다. 모델을 변경하거나 필터를 사용하여 프로젝션 쿼리를 사용하십시오 (나중에 재귀 데이터 모델에 문제가있을 수 있음). –
주석에 대한 주석이'ThreadId = 3'을 가진 스레드에 대한 직접적인 참조를 가지고 있기 때문에 거기에 표시됩니다. 최상위 레벨 주석에만 스레드에 대한 참조가있는 경우에는 발생하지 않습니다. JSON은 중첩 된 주석을 참조 할 수 없으므로 주석을 반복합니다. –