使用include In Linq EF时修复循环

时间:2017-06-28 09:59:20

标签: c# entity-framework linq

在我的情况下,有没有办法解决LINQ和EF6中的循环问题,有三个类如下:

第一名:员工班级:

public class staff
{
    [Key]
    public int ID { get; set; }
    public string  Name {get;set;}
    public int ClassId { get; set; }
    public virtual Class Classes { get; set; }    
}

第二名:课程类:

public class Classes {
    public int Id { get; set; }
    public string ClassName { get; set; }
    public virtual ICollection<StaffClass> StaffClasses { get; set; }
 }

第三名:StaffClass Class:

public class StaffClass{
    public int ID { get; set; }
    public int StaffId { get; set; }
    public virtual  Staff  Staffs { get; set; }
    public int ClassId { get; set; }
    public virtual Class Classes { get; set; }
} 

尝试从上下文中获取数据时

Context.Staffs.Include(s => s.StaffClass.Select(f=>f.Classes))

以上查询的结果:

[{
"Id": 4,
"Name": "Teacher",
"StaffClass": [{
    "ID": 13,
    "ClassId": 6,
    "Classes": {
        "Id": 6,
        "ClassName": "S1",
        "StaffClasses": [{
            "ID": 27,
            "ClassId": 6
        }, {
            "ID": 33,
            "ClassId": 6
        }]
    }
    }]
}]

在classess

中仅返回没有加载人员类的人员和班级的预期结果

我尝试在false

中将延迟加载设置为Context
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;

但我得到了相同的结果

1 个答案:

答案 0 :(得分:0)

如果我理解正确,这可能是JSON序列化的问题:

试试这个:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
      .ReferenceLoopHandling = 
       Newtonsoft.Json.ReferenceLoopHandling.Ignore;

这将忽略指向对象的引用。