模型是否需要在MVC3中镜像数据库?

时间:2011-08-29 22:23:59

标签: asp.net-mvc asp.net-mvc-3

我正在学习使用MVC 3框架,但我在理解某些概念时遇到了一些问题。我问这个问题是因为我试图理解“Internet应用程序模板”生成的代码 在RegisterModel的AccountModels.cs文件中,我们找到:

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }

很明显,您的数据库中没有Password和ConfirmPassword字段,您只需要一个密码字段。那么,为什么这个模型不镜像数据库呢?我错过了什么?

2 个答案:

答案 0 :(得分:4)

这是一个视图模型,而不是模型。视图模型不应镜像任何数据库。视图模型甚至不知道数据库是什么。视图模型是您设计的,以满足特定视图的要求。它是一个控制器动作传递给视图的类。

在谈论模型时,我们通常会讨论域模型或域实体。这些符合您的业务要求。

所以这是控制器动作的常用流程:

  1. 从服务层
  2. 获取域模型
  3. 将此域模型映射/转换为视图模型
  4. 它将视图模型传递给视图
  5. 反过来说:

    1. 从视图中获取视图模型
    2. 将此视图模型映射/转换回域模型
    3. 它将域模型传递给服务层进行处理
    4. 因此,单个域模型可以具有多个视图模型表示。单个视图模型可以映射到多个域模型。

答案 1 :(得分:1)

模型不必与数据库匹配。您通常会有数据库表的模型,但也包含与特定页面相关的信息的模型(在MVC中称为View),例如登录页面。

模型可以包含这两者;表示数据库表并查看特定信息。这些有时被称为ViewModels。

您可以发送到视图的任何信息都可以在模型中表示。