【发布时间】:2017-03-15 12:44:12
【问题描述】:
我已经阅读了很多针对此问题的先前解决方案,但没有一个对我有用。
我在 Event 和 User 对象之间有一个循环关系:
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
我尝试了任何方法,我也有一个带有公共虚拟用户创建器的代码版本,以使其延迟加载..
目前,在将事件返回给我正在执行的客户端之前,我的解决方案非常不优雅:
event.Creator = null;
和
event.Managers = null;
为了避免自引用循环。
解决这类问题的正确方法是什么?
提前致谢, 立然!
【问题讨论】:
-
你用什么序列化它?
-
如果你使用 XML stackoverflow.com/questions/5004397/… 可能是相关的
-
stackoverflow.com/questions/26434738/… 可能对 json 感兴趣
-
可能还有其他人。向我们展示您的序列化代码和您的问题的最小完整示例绝对有用(即给我们一个程序,该程序使用循环引用创建这些对象,然后用您使用的任何方法对它们进行序列化,这样我们就可以a)确切地看到您是什么做什么以及如何生成错误,以及 b) 轻松修改代码以使其正常工作,而不必自己编写所有代码来确认我们建议的任何解决方案。
标签: c# entity-framework azure asp.net-web-api