【问题标题】:EF 6 auto lazy load parent navigation properties (WCF cyclic reference)EF 6 自动延迟加载父导航属性(WCF 循环引用)
【发布时间】:2018-07-10 10:29:12
【问题描述】:

我正在尝试创建一个 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 服务发送响应结果,因为该服务提到了循环引用。

【问题讨论】:

    标签: entity-framework wcf


    【解决方案1】:

    知道了。

    我不得不用这个来装饰我的实体类。

    [DataContract(IsReference = true)]
    

    还有每个属性

    [DataMember]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多