1

我首先在我的一个 mvc 3 项目中使用 EF 代码。我有一个关于将复杂的 EF POCO 对象传入和传出视图时使用什么模式的问题。

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

我的问题如下:

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

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

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

谢谢

4

2 回答 2

3

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

于 2012-10-22T18:53:33.873 回答
1
  1. 我应该将 EF poco 对象序列化为 JSON 对象,以便可以在视图中使用它吗? 不。
  2. 当我从视图中接收更新时,如何重新构建客户对象?不。让默认模型绑定器将 POST 数据具体化为视图模型(或编辑模型),并使用该数据向较低层发出命令。
  3. 客户对象重建后,是否可以一次性保存整个对象图(客户、订单、商品)?它是,但你不应该。相反,请根据您的用例单独处理每个更新。

在此处遵循 mojo722 和 Pluc 的建议。不要在 MVC 层中使用 EF POCO 实体。使用视图模型。以下是它的工作原理:

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