在MVC中使用EntityFramework返回带有导航属性的实体作为JSON的最佳实践

本文关键字:实体 JSON 最佳 属性 导航 MVC EntityFramework 返回 | 更新日期: 2023-09-27 17:52:37

我有一个MVC应用程序与EntityFramework。我想返回一个具有导航属性的实体实例作为JsonResult,例如,一个Customer实例,其中它有一个到订单列表的导航属性。

我想知道做这件事的最好方法是什么:

  • 声明一个新的DTO/Model View类来"平面化"实体,但似乎客户的冗余信息存储在每个DTO/View Model中。
  • 原样返回,然后在客户端处理它。我不喜欢这种方法,因为我需要在客户端做额外的处理,这很难调试。如果我在Order实体中有一个Customer导航属性,也有循环引用的风险。

感谢您的任何反馈!

在MVC中使用EntityFramework返回带有导航属性的实体作为JSON的最佳实践

我认为最好的选择是第二种:将数据作为嵌套列表返回。但是您不应该一直展开导航属性,并且应该在每个方法/端点中定义并明确要展开哪个属性(以避免您提到的循环引用问题以及其他性能问题)。假设您有一个Customer对象,它的属性是Orders,如果您需要返回它,您可以这样做:

return context.Users.Include(b => b.Orders).ToList(); 

如果你不需要在一个单独的结束点的订单,你可以返回客户。

在大型项目中,我认为最好的方法是创建一个DTO来将数据序列化为能够最好地代表消费者需求的JSON。即使类具有相同的字段。随着项目的发展,越来越多的程序员将他们的手放在代码上,这是更好的维护方式。