加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC – 创建一个新模型或使用Entity框架

发布时间:2020-12-16 04:05:40 所属栏目:asp.Net 来源:网络整理
导读:我正在开发一个ASP.NET MVC 3应用程序,我首先使用实体??框架代码来创建我的应用程序的类,并且我还有一个存储库以便对其执行操作,保持DBContext和DBEntities的清洁定义. 我的疑问是关于视图的渲染以及保存编辑模型的方式. 如果我有这个实体代表我的数据库中存
我正在开发一个ASP.NET MVC 3应用程序,我首先使用实体??框架代码来创建我的应用程序的类,并且我还有一个存储库以便对其执行操作,保持DBContext和DBEntities的清洁定义.

我的疑问是关于视图的渲染以及保存编辑模型的方式.

如果我有这个实体代表我的数据库中存储的用户:

//Entity:
public class User 
{
    [Key]
    public int IdUser { get; set; }
    public string UserName { get; set; }   
    public string Password { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

我想显示一个带有FirstName,LastName,Email和NewPassword,ConfirmPasword和CurrentPassword的视图,以便让用户更改他的数据,输入CurrentPassword来确认更改,所以我怀疑是,像ConfirmPasword和CurrentPassword这样的人在我的实体中,所以我需要为此View创建一个新模型,并将我想要的信息从我的新模型复制到我的数据库实体以保存它?喜欢:

public class UpdateUserModel
{

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

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

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Not valid email")]
    public string Email { get; set; }      

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

    [DataType(DataType.Password)]
    [Display(Name = "Confirm the New Pasword")]
    [Compare("NewPasword",ErrorMessage = "Password doesn′t mach.")]
    public string ConfirmPasword{ get; set; }

    [Required(ErrorMessage = "Need to specify the current password to save changes")]
    [DataType(DataType.Password)]
    [Display(Name = "Current Password")]
    public string CurrentPassword { get; set; }
}

在我做的控制器中:

public ActionResult UpdateUser(UpdateUserModel model)
{              
    User u = (User)Membership.GetUser();            
    u.FirstName = model.FirstName;
    u.LastName = model.LastName;
    u.Email = model.Email;

    if (!String.IsNullOrEmpty(model.NewPassword))
    {
        u.Password = FormsAuthentication.HashPasswordForStoringInConfigFile(model.NewPassword.Trim(),"md5");
    }

    repository.UpdateUser(u);

    return View();
}

有任何方法可以做这样的控制器,如:

public ActionResult UpdateUser(User u)
{               
    repository.UpdateUser(u);              
    return View();
}

因为如果我有,我如何添加像ConfirmPassword或CurrentPassword这样的字段,以便对此特定视图进行验证.

解决方法

如果我是你,我不会在我的表示层使用域模型.我会创建一个视图模型(另一个类),它将与我的域模型非常相似.然后我会使用自动映射工具从我的域模型映射到视图模型.

这是一种非常常见的情况,因此如果您使用谷歌“视图和域”模型,您应该找到所需的一切.

public class User {
        [Key]
        public int IdUser { get; set; }
        public string UserName { get; set; }   
        public string Password { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }

}

public class UpdateUserViewModel {
    // Original fields

    public string Password  { get; set; }

    public string PasswordConfirmation { get; set;
}

然后,您可以配置自动映射器以删除锅炉板代码:

public ActionResult ShowUser()
{
    var domainModel = new User(); // I'm assuming that properties are set somewhere
    var viewModel = new UserViewModel();  

    Autommaper.Map(domainModel,viewModel);

    return View(viewModel);
}

这非常粗糙,但希望你能有所了解.

更新1:**

As i understood is better to create a new model for each view and then map it into the entity

它不仅更好,它提供了更好的关注点分离,使您的代码易于测试.只需查看类的名称,我就可以看到它的用途UpdateUserViewModel,RegisterUserViewModel等).

Original fields,in this class is supposed to be the Metadata with the validation and that stuff isn’t?

原始字段我的意思是:

public class UserViewModel{
   public string UserName { get; set; }
   public string FirstName { get; set; }

}

这些字段已经在您的User类中,所以我通过不再输入它来节省我的时间.

This will be change my model from MVC to MVVM or not beacuse i still have a controller?

我相信我所建议的仍然是MVC模式,而不是MVVM.

About the Automaper,are you using github.com/AutoMapper/AutoMapper?

Automapper是我用过的东西.那里有很少的工具,它们几乎完全相同.尝试一下,找到最适合您需求的产品.

祝好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读