我正在尝试创建一个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服务发送响应结果,因为该服务提及了循环引用。
答案 0 :(得分:0)
知道了。
我不得不以此装饰我的实体类。
[DataContract(IsReference = true)]
以及每个属性
[DataMember]
之后,序列化程序将按预期工作。