Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EntityFramework在MVC中以JSON形式返回具有导航属性的实体的最佳实践_C#_Json_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 使用EntityFramework在MVC中以JSON形式返回具有导航属性的实体的最佳实践

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模型中 按原样返回,然后在客户端进行处理。我不喜欢这种方法,因为我需要在客户端进行额外的处理,这可能很难调试。此外,如果我在订单实体中拥有客户导航属性,则存在循环引用的风险 谢谢你的反馈 我认为最好

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

我想知道最好的方法是什么:

  • 声明一个新的DTO/Model视图类来“修饰”实体,但似乎客户的冗余信息存储在每个DTO/View模型中
  • 按原样返回,然后在客户端进行处理。我不喜欢这种方法,因为我需要在客户端进行额外的处理,这可能很难调试。此外,如果我在订单实体中拥有客户导航属性,则存在循环引用的风险

谢谢你的反馈

我认为最好的选择是第二个:将数据作为嵌套列表返回。 但是您不应该一直扩展navigation属性,在每个方法/端点中,您应该定义并明确要扩展的属性(以避免您提到的循环引用问题以及其他性能问题)。 假设您有一个以订单为属性的客户对象,如果需要将其返回,请执行以下操作:

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

如果你不需要在一个单独的端点下订单,你可以直接返回客户。

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

谢谢。我会选择这个选项。谢谢你的回复。这也很有帮助。