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



我在我的MVC 3项目之一中首先使用EF代码。我有一个问题,即传递复杂的EF Poco对象时要使用哪种模式。

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

我的问题如下:

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

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

  3. 重建客户对象后,是否有可能将整个对象图(客户,订单,项目)保存为一张?

谢谢

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

  1. 我应该将EF POCO对象序列化为JSON对象,以便可以在视图中使用它吗?否。
  2. 当我从视图中收到更新时,如何重新构造客户对象?不要。让默认的ModelBinder将张贴的数据实现到ViewModel(或EditModel),然后使用该数据将命令发布到较低的层。
  3. 在重建客户对象后,是否可以将整个对象图(客户,订单,项目)保存在一部分中?是,但是您不应该。而是根据用例单独处理每个更新。

在此处遵循Mojo722和PLUC的建议。不要在MVC层中使用EF Poco实体。使用ViewModels。以下是它的工作方式:

  • 控制器需要数据,它要求较低的层。下层获取数据并返回实体(或者更好,实体视图)。
  • 控制器将实体转换为ViewModels(自动应用程序对此有好处,但您也可以手动映射)。
  • 控制器将ViewModels传递到查看。
  • 视图从HTML表格发送HTTP帖子数据。
  • 默认模型活页夹将http发布的表单数据转换为视图模型。
  • 控制器接收到ViewModel数据,向下层发出命令。
  • 下层使用EF来保存新实体状态。

最新更新