EF代码第一个循环引用

时间:2012-08-17 19:35:26

标签: entity-framework entity-framework-4

我对实体框架有疑问。  在我们的项目中,我们需要一些循环引用,如下所示:

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等等。所以我们得到一个无限循环。

有没有办法配置它以使其正常工作?

1 个答案:

答案 0 :(得分:1)

除非您尝试将其序列化,否则它可以正常使用 - 序列化需要一些特殊处理(属性)才能让序列化程序识别循环引用。

渴望加载仅加载您在Include调用中指定的级别,仅此而已。其他所有内容都可以通过延迟加载加载,但EF不会再次加载已加载的关系。有些情况下它不能按预期工作 - 例如POCO生成器中的导航属性修复(它延迟加载其他数据来修复反向导航属性)。