MVC3数据在不在表格上时会丢失吗?

时间:2012-08-08 16:09:26

标签: asp.net-mvc-3 entity-framework-4 persistence automapper dto

我正在开发一个MVC3项目,我注意到当从UI更新该记录时,数据库中的某些字段被设置为null。发生这种情况是因为帖子上的表单上没有这些字段。我知道这可以通过为这些添加HiddenFor条目来解决,但这不是一个很好的方法,因为还需要在那里添加任何新字段。我希望能找到更好的解决方案。

关于项目结构的一些细节:

我们有完全匹配EF实体的DTO以简化映射。因此,DTO拥有实体和实体中的每个领域。数据库。我们使用DTO作为模型。

控制器将DTO传递给服务层。服务层将DTO映射到其各自的实体(使用AutoMapper),并将其传递给持久层。持久层实际上是使用DbContext来保存更改。

假设我们有一个带有Name成员和FolderPath成员的Client DTO,以及一个只在其表单上有Name成员的视图。表单发布,FolderPath为null。该空值一直持续到持久层中的更新。在某个地方,我必须指定我不希望该特定值覆盖数据库中的内容。

从我收集的研究结果大约一个小时开始,一种方法可能就是......

  1. 对于我们的特定字段集,保持DTO的范围最小 知道我们将在视图中的表格上。
  2. 告诉AutoMapper忽略 目的地中存在的任何内容,但不包括来源per this answer.
  3. 在服务层中,将DTO映射到 实体,首先从数据库中检索现有实体。该 映射只会覆盖属于DTO的成员, 任何其他值将持续存在,因为它们是从中检索的 数据库。
  4. 这是一种有效的方法吗?有没有更好或更常见的方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

我会使用选项1并具有view / html格式的特定模型。这是最干净的解决方案,恕我直言。

还有一个主要问题,其他方式让你对黑客开放...即如果我知道你的模型上的其他字段/属性,我可以制作一个包含该信息的表格帖子并将其保存。