检测到一个循环引用
本文关键字:一个 循环 引用 检测 | 更新日期: 2023-09-27 18:05:18
出现如下错误试图建立一个关系,说一个帖子可以有多个postComments
在序列化System.Collections.Generic.List ' 1[[DAO.Models. models]类型的对象时检测到循环引用。PostComment, DAO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] .
int userId = (int)Session["UserId"];
try
{
IEnumerable<Post> userPosts;
userPosts = (from q in db.Posts
where q.UserId == userId
&& q.PostId > postid
select q).Take(5).ToList();
return Json(userPosts.Select(x => new
{
success = 1,
contenttext = x.PostContent,
postId = x.PostId,
comments = x.PostComments
}), JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { success = 0 });
}
finally
{
//db.Dispose();
}
My Post class
public partial class Post
{
public Post()
{
this.PostComments = new List<PostComment>();
}
public int UserId { get; set; }
public int PostId { get; set; }
public string PostContent { get; set; }
public virtual ICollection<PostComment> PostComments { get; set; }
public partial class PostComment
{
public long PostCommentID { get; set; }
public int PostId { get; set; }
public int ParentCommentID { get; set; }
public System.DateTime CommentDate { get; set; }
public string Comment { get; set; }
public virtual Post Post { get; set; }
}
}
在您的Post
类中,您引用PostComment,在您的PostComment
类中,您再次引用Post
,这就是循环引用发生的地方,您可以使用Json。. NET http://james.newtonking.com/pages/json-net.aspx并执行以下操作
JsonConvert.SerializeObject(myObject, Formatting.Indented,
new JsonSerializerSettings {
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
})
忽略引用循环处理,或者在序列化之前将其强制转换为匿名类。
这意味着您在数据库中对某些列有一些约束,这些列必须引用某些表中的有效行,这里有一个循环引用。它必须按照它们相互依赖的顺序更新行,但由于循环引用,这是不可能的。没有任何一行可以首先更新,从而满足当时的数据库约束。