EF 6自动延迟加载父导航属性(WCF循环参考)

时间:2018-07-10 10:29:13

标签: entity-framework wcf

我正在尝试创建一个wcf服务,该服务通过ef6从数据库加载数据并将数据发送回客户端。 现在,如果我尝试从数据库中加载相关数据,就会遇到问题。

我可以承受急切的负载,因此我在上下文类中禁用了惰性负载。

base.Configuration.ProxyCreationEnabled = false;
base.Configuration.LazyLoadingEnabled = false;

现在我有一个模型类,该模型类通过导航属性引用了另一个。 (在这里上课)

public class Employee {
  public Guid EmployeeId {get;set;}

  public ICollection<Address> Addresses {get;set;}
}

public class Address {
  public Guid AdressId {get;set;}
  public Guid EmployeeId {get;set;}

  public Employee Employee {get;set;}
}

因此,您可以看到Employee拥有一个地址列表,并且一个地址绑定到一位雇员(因此,如果我没错,我们之间是1:n的关系)

现在,有了模型类和数据上下文,我尝试通过此查询从数据库中检索值。

var employee = await _context.Employees
                             .AsNoTracking()
                             .Include(x => x.Addresses)
                             .FirstOrDefaultAsync(x => x.EmployeeId == employeeId);

在这里我有一个问题,即生成的雇员类通过内部地址类对其自身进行引用。像这样

  • 员工
    • 通过地址导航属性引用的地址
      • 通过“员工”导航属性推荐的员工
      • 依此类推

我告诉ef,请仅从Employee属性中包含Adress属性。 所以我的问题是,为什么ef会自动在adress属性中包含父Employee属性。(我认为ef核心与ThanInclude的行为在ef中有相似之处?)

如果我无法停止此自动加载,则无法通过wcf服务发送响应结果,因为该服务提及了循环引用。

1 个答案:

答案 0 :(得分:0)

知道了。

我不得不以此装饰我的实体类。

[DataContract(IsReference = true)]

以及每个属性

[DataMember]

之后,序列化程序将按预期工作。