我已经阅读了很多以前针对此问题的解决方案,但没有一个对我有用。
我在事件和用户对象之间有循环关系:
public class Event : EntityData
{
[Required]
[ForeignKey("Creator")]
public string CreatorId { get; set; }
public User Creator { get; set; }
[InverseProperty("ParticipantIn")]
public virtual ICollection<User> Participants { get; set; }
[InverseProperty("ManagerIn")]
public virtual ICollection<User> Managers { get; set; }
}
如您所见,我对此类中的 User 进行了三个引用:事件创建者、管理者列表和参与者列表。
用户类还包含对事件的引用:
public class User: EntityData
{
[InverseProperty("Participants")]
public virtual ICollection<Event> ParticipantIn { get; set; }
[InverseProperty("Managers")]
public virtual ICollection<Event> ManagerIn { get; set; }
}
现在,问题是,当我尝试序列化一个事件时,就像在我的 createEvent 函数中一样,它告诉我存在一个自引用循环,那是因为当创建事件时,我将其添加到创建者的事件中“ManagerIn”集合。
该行导致 Event->Creator->ManagerIn->Event->Creator->..... LOOP
我尝试了任何方法,我还有一个带有公共(public)虚拟用户创建者的代码版本,以便使其延迟加载..
目前,我的解决方案非常不优雅,在将事件返回给我正在执行的客户端之前:
event.Creator = null;
和
event.Managers = null;
以避免自引用循环。
解决此类问题的正确方法是什么?
提前致谢, 丽然!
最佳答案
我读到这是一种方法。
MyContextEntities.ContextOptions.ProxyCreationEnabled = false;
否则,我建议序列化到不同的对象并避免序列化你的 poco。
关于c# - 检测到自引用循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42810150/