在ASP.net MVC中使用EF对象的设计注意事项

时间:2012-10-22 18:49:07

标签: c# asp.net-mvc entity-framework

我在我的一个mvc 3项目中首先使用EF代码。我有一个问题,即在向视图传递复杂的EF POCO对象时使用哪些模式。

例如,客户对象有一个订单列表,每个订单都有一个项目列表。客户对象将被发送到视图。视图更新客户对象及其内部对象(订单,项目),然后将其发送回控制器。控制器具有EF以持久保存客户对象。

我的问题如下:

  1. 我应该将EF poco对象序列化为JSON对象,以便在视图中使用它吗?

  2. 当我从视图接收更新时,如何重新构建客户对象?

  3. 重建客户对象后,是否可以一次性保存整个对象图(客户,订单,项目)?

  4. 由于

2 个答案:

答案 0 :(得分:3)

我倾向于远离使用EF POCO对象作为我的视图的模型。我通常会从一个或多个POCO对象创建视图模型,因为我在视图中需要的东西永远不会与单个EF POCO对象完全匹配。然后,视图模型将创建EF对象,然后将其保存到数据库中。

答案 1 :(得分:1)

  1. 我应该将EF poco对象序列化为JSON对象,以便在视图中使用它吗?
  2. 当我从视图接收更新时,如何重新构建客户对象?的唐'吨。让默认的模型绑定器将POSTed数据具体化为viewmodel(或editmodel),并使用该数据向较低层发出命令。
  3. 重建客户对象后,是否可以一次性保存整个对象图(客户,订单,项目)? 确实如此,但你不应该这样做。相反,请根据您的使用情况单独处理每个更新。
  4. 在这里关注mojo722和Pluc的建议。不要在MVC层中使用EF POCO实体。使用viewmodels。以下是它的工作原理:

    • 控制器需要数据,它要求较低层。较低层获取数据并返回实体(或更好的实体视图)。
    • Controller将实体转换为视图模型(AutoMapper适用于此,但您也可以手动映射)。
    • Controller将视图模型传递给视图。
    • View从HTML表单发送HTTP POST数据。
    • 默认模型绑定器将HTTP POSTed表单数据转换为viewmodel。
    • Controller接收viewmodel数据,向下层发出命令。
    • 下层使用EF来保存新的实体状态。