【发布时间】:2018-02-08 21:32:52
【问题描述】:
我有两个相关的实体,称为 DataTag 和 TagSource,如下所示:
public class DataTag : BaseModel
{
[Column("DataTagId")]
public override Guid ID { get; set; }
public string Tag { get; set; }
public Guid TagSourceId { get; set; }
public TagSource TagSource { get; set; }
}
public class TagSource : BaseModel
{
[Column("TagSourceId")]
public override Guid ID { get; set; }
public string Description { get; set; }
public bool IsInternal { get; set; }
public string Source { get; set; }
public ICollection<DataTag> DataTags { get; set; }
}
我允许用户通过“/api/DataTags?Include=TagSource”之类的 url 包含导航属性。问题是当我包含 TagSource 时,它还包含该对象中我不想要的 DataTag 集合,除非用户指定它(例如“/api/DataTags?Include=TagSource.DataTags”。有什么办法吗?当我包含 TagSource 时阻止该属性被加载?我尝试将属性设为虚拟并在全局范围内关闭延迟加载,但这不起作用。我没有将它们标记为虚拟的原因是因为我正在使用 AutoMapper只想包含用户指定的导航属性。
【问题讨论】:
-
把它投影到别的东西上。您的问题是 WebAPI 序列化了您返回的整个对象。
-
将 DTO 与您想要返回给用户的数据一起使用
-
你能显示 URL 映射到的操作方法吗?我不明白禁用延迟加载仍然会加载导航属性。
标签: c# entity-framework asp.net-web-api