C# 使用EntityFramework在MVC中以JSON形式返回具有导航属性的实体的最佳实践
我有一个带有EntityFramework的MVC应用程序。 我想将具有导航属性的实体的实例作为JsonResult返回,例如,一个客户实例,其中它具有订单列表的导航属性 我想知道最好的方法是什么:C# 使用EntityFramework在MVC中以JSON形式返回具有导航属性的实体的最佳实践,c#,json,asp.net-mvc,entity-framework,C#,Json,Asp.net Mvc,Entity Framework,我有一个带有EntityFramework的MVC应用程序。 我想将具有导航属性的实体的实例作为JsonResult返回,例如,一个客户实例,其中它具有订单列表的导航属性 我想知道最好的方法是什么: 声明一个新的DTO/Model视图类来“修饰”实体,但似乎客户的冗余信息存储在每个DTO/View模型中 按原样返回,然后在客户端进行处理。我不喜欢这种方法,因为我需要在客户端进行额外的处理,这可能很难调试。此外,如果我在订单实体中拥有客户导航属性,则存在循环引用的风险 谢谢你的反馈 我认为最好
- 声明一个新的DTO/Model视图类来“修饰”实体,但似乎客户的冗余信息存储在每个DTO/View模型中
- 按原样返回,然后在客户端进行处理。我不喜欢这种方法,因为我需要在客户端进行额外的处理,这可能很难调试。此外,如果我在订单实体中拥有客户导航属性,则存在循环引用的风险
谢谢你的反馈 我认为最好的选择是第二个:将数据作为嵌套列表返回。 但是您不应该一直扩展navigation属性,在每个方法/端点中,您应该定义并明确要扩展的属性(以避免您提到的循环引用问题以及其他性能问题)。 假设您有一个以订单为属性的客户对象,如果需要将其返回,请执行以下操作:
return context.Users.Include(b => b.Orders).ToList();
如果你不需要在一个单独的端点下订单,你可以直接返回客户。在大型项目中,我认为最好的方法是创建一个DTO,将数据序列化为JSON,以最好地代表消费者的需求。即使类具有相同的字段。随着项目的发展,越来越多的程序员开始着手编写代码,这是更好的维护方式。谢谢。我会选择这个选项。谢谢你的回复。这也很有帮助。