【问题标题】: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。即使类具有相同的字段。随着项目的发展,越来越多的程序员将手放在代码上,这样可以更好地进行维护。

    【讨论】:

    • 感谢您的回复。这也很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2018-07-28
    • 2016-03-31
    相关资源
    最近更新 更多