【问题标题】:Using a model for multiple purposes将模型用于多种用途
【发布时间】:2013-05-23 14:43:40
【问题描述】:

我是使用实体框架的 ASP.NET MVC 的新手,我正在尝试创建一个简单的登录系统。目前我有UserProfile 模型,我希望用它来建模登录表单。

UserProfile.cs

namespace MyProject.Areas.Admin.Models
{
    public class UserProfile {

        [Key]
        public int UserID { get; set; }

        [Required]
        [Display(Name = "Username")]
        public string Username { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        public string FirstName { get; set; }
        public string Surname { get; set; }
        public string EmailAddress { get; set; }
        public string Telephone { get; set; }

    }
}

由于我的登录表单只需要用户名和密码,我创建一个单独的模型是否正确(例如,只有这些属性的LoginModel,还是应该继续使用UserProfile 模型?

创建一个单独的模型来为登录提交建模对我来说感觉更好,但是我遇到了诸如让它们引用同一个表之类的问题?

谢谢

【问题讨论】:

    标签: asp.net-mvc entity-framework


    【解决方案1】:

    您应该只有一个Model(域模型),但有不同的ViewModel 类。

    ViewModel 将仅具有某个 View /Action 所需的属性(来自模型)。

    要管理 ModelViewModel(s) 之间的映射,您应该查看映射解决方案(如 AutoMapper、ValueInjecter...)

    【讨论】:

    • 我明白了!这当然更有意义。所以只是为了澄清;创建一个LoginViewModel 并从UserProfile 视图模型映射UsernamePassword 属性?
    • @BigJoe 好吧,是的:UserProfile 是模型,而 LoginViewModel 是 ViewModel。当您想要加载数据以在视图中显示它们时,您可以从 Model 映射到 ViewModel。如果您需要更新来自 View 的数据,请将 ViewModel 映射到 Model。
    【解决方案2】:

    看起来你应该区分视图模型和域模型。感兴趣的讨论是here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 2021-08-06
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2015-03-16
      • 2021-08-25
      相关资源
      最近更新 更多