我对实体框架有疑问。 在我们的项目中,我们需要一些循环引用,如下所示:
public class OptionClusterSet
{
public int ID { get; set; }
public virtual ICollection<OptionCluster> OptionClusters { get; set; }
}
public class OptionCluster
{
public int ID { get; set; }
public long OptionClusterSetId { get; set; }
public virtual OptionClusterSet OptionClusterSet { get; set; }
}
问题在于,每当我们尝试使用预先加载获取包含其OptionClusters 的OptionClusterSet时,OptionClusters会尝试加载他们的OptionClusterSets等等。所以我们得到一个无限循环。
有没有办法配置它以使其正常工作?
答案 0 :(得分:1)
除非您尝试将其序列化,否则它可以正常使用 - 序列化需要一些特殊处理(属性)才能让序列化程序识别循环引用。
渴望加载仅加载您在Include
调用中指定的级别,仅此而已。其他所有内容都可以通过延迟加载加载,但EF不会再次加载已加载的关系。有些情况下它不能按预期工作 - 例如POCO生成器中的导航属性修复(它延迟加载其他数据来修复反向导航属性)。