【问题标题】:Best practices to return entities with navigation properties as JSON in MVC with EntityFramework在使用 EntityFramework 的 MVC 中将具有导航属性的实体作为 JSON 返回的最佳实践
【发布时间】:2015-06-02 16:21:07
【问题描述】:
我有一个带有 EntityFramework 的 MVC 应用程序。
我想返回一个具有导航属性的实体实例作为 JsonResult,例如,一个 Customer 实例,其中它具有指向订单列表的导航属性。
我想知道最好的方法是什么:
- 声明一个新的 DTO/Model View 类来“扁平化”实体,但似乎 Customer 的冗余信息存储在每个 DTO/View Model 中。
- 按原样返回,然后在客户端进行处理。我不喜欢这种方法,因为我需要在客户端进行额外的处理,这很难调试。如果我在 Order 实体中有一个 Customer 导航属性,也存在循环引用的风险。
感谢您的任何反馈!
【问题讨论】:
标签:
c#
json
asp.net-mvc
entity-framework
【解决方案1】:
我认为最好的选择是第二个:将数据作为嵌套列表返回。
但是您不应该一直扩展导航属性,并且在每个方法/端点中,您应该定义并明确要扩展的属性(以避免您提到的循环引用问题以及其他性能问题)。
假设您有一个具有 Orders 作为属性的 Customer 对象,如果您需要返回它,您可以这样:
return context.Users.Include(b => b.Orders).ToList();
如果您不需要将订单放在单独的端点,您可以退回客户。
【解决方案2】:
在大型项目中,我认为最好的方法是创建一个 DTO 来将您的数据序列化为最能代表消费者需求的 JSON。即使类具有相同的字段。随着项目的发展,越来越多的程序员将手放在代码上,这样可以更好地进行维护。