如何正确使用数据注释 select Web API 应返回哪些项目?

How to correctly use Data Annotations to select which Items should be returned by the Web API?

我正在尝试指定要通过 Web API 从数据库查询中 return 编辑的数据子集 2。 特别是,对于这个查询,我首先打开延迟加载:

db.Configuration.LazyLoadingEnabled = true;

这是因为 children 可能有无限个级别。例如:

Parent: {"name":"Jon","children":[{"name":"Dave","children":["name":"Ed"...

以上序列中的每个人也可以有一个传记。在数据库中,书籍也有相关表格,比方说,作者、审稿人等。

据我所知,我可以向模型添加数据注释以指定要 return 的字段:

[Key]

= 指定将被 returned

的密钥
[DataMember]

= 指定一个 属性 将被 returned

[JsonIgnore]
[IgnoreDataMember]

= 指定一个 属性 不会被 returned

[JsonObject(IsReference = true)]

= 指定 object 被另一个 object 引用,因此不应加载相关的 objects

我正在努力加载相关传记。传记的 id 是 returning,但是传记 objects 是空的。在 parent object 中,我用 [DataMember] 注释了可空 int 和虚拟 object 对传记的引用。在传记 object 中,我用 [Key] 指定了 id,用 [DataMember] 指定了名称,用 [JsonIgnore] [IgnoreDataMember] 指定了所有其他属性。但是传记没有被加载。数据库查询 returning 加载的项目,但它们随后被 web api 清空,我假设是因为链中某处的一些循环引用。

大约有 50 个表以某种方式链接,我是否需要遍历所有表并为每个人添加数据注释 - 即使我使用了忽略注释来断开链?希望有一个简单的解决方案,但任何解决方案都不胜感激!

[DataMember] 将加载相关数据的 HashSet 似乎工作正常,它在构造函数中实例化,但相关数据库 objects(未在构造函数中实例化)不要加载。

似乎更新语句没有打开延迟加载:

db.Configuration.LazyLoadingEnabled = true;

只有当我进入调试模式并在悬停在对象上时加载相关数据时才会返回相关项目(看起来很奇怪),但基本上它处于延迟加载=假模式。

我的解决方案是全局启用延迟加载并如上所述使用数据注释来避免循环引用。