entity framework包含没有嵌套属性

我有两个名为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 DataTags { get; set; } } 

我允许用户通过URL包含导航属性,如“/ api / DataTags?Include = TagSource”。 问题是当我包含TagSource时,它还包括该对象中的DataTags集合,除非用户指定它,否则我不想要它(例如“/api/DataTags?Include=TagSource.DataTags”。有什么办法吗?当我包含TagSource时停止加载该属性?我尝试将属性设置为虚拟并在全局范围内关闭延迟加载,但这不起作用。我没有将它们标记为虚拟的原因是因为我使用AutoMapper而我只想包含用户指定的导航属性。

与评论中一样,您需要创建DTO对象。 这里有一篇很好的文章详细介绍了如何使用WebAPI执行此操作

http://www.asp.net/web-api/overview/data/using-web-api-with-entity-framework/part-5

编辑。

这个问题是你需要为每个可能的结果需要很多不同的DTO对象,这些对象可能会变得混乱。 如果您的返回类型是JSON,则可以将此属性添加到您的属性中:

 [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 

首先:为我的英语道歉。

其次:我遇到了代码第一个数据库模型的问题,它以这种方式创建外键: public virtual CollectionObjects {get; set;} public virtual CollectionObjects {get; set;}

我通过将属性设置器设置为私有来找到解决方法:

 public virtual Collection Objects {get; private set;} 

然后EF无法填充Objects集合,因为使用私有集时,您只能在构造函数中分配值。