如何跳过数据库中的Viewmodel(ASP MVC)

时间:2014-10-12 14:23:02

标签: c# asp.net-mvc

我有一个模特:

public class User
{
    public int ID { get;set; }
    public string userName { get;set; }
    public string userPassword { get;set; }
    public string userEmail { get;set; }
}

和一个示例viewmodel:

public class UserViewModel
{
    public int ID { get; set; }

    [DisplayName("User Name")]
    public string userName { get; set; }
    public string userPassword { get; set; }
    public string userEmail { get; set; }
}

和创建动作:

[HttpPost]
public ActionResult Create(UserViewModel u)
{
    //user.ID = u.ID;
    user.userEmail = u.userEmail;
    user.userName = u.userName;
    user.userPassword = u.userPassword;

    dbContext.users.Add(user);
    dbContext.SaveChanges();

    return View();
}

所以现在我想只将我的模型添加到数据库中,但是如果我创建了一个View,那么Visual Studio会继续将它添加到上下文中:

   public System.Data.Entity.DbSet<ProjectManagement.ViewModels.UserViewModel> UserViewModels { get; set; }

..在数据库中创建一个额外的空表。这是为什么?如果我想用验证,数据等分离模型和ViewModel,我该怎么办?

1 个答案:

答案 0 :(得分:2)

创建视图时,请不要选择数据库上下文。手动处理,以便Visual Studio不会自动更改您的上下文类。

当您创建一个选择ViewModel和数据库上下文的视图时,Visual Studio将打开上下文文件并为ViewModel添加DbSet条目,因为它不存在。如果你不选择它就不会做任何事情,那么你可以控制你的文件。


作为一个副节点,要将ViewModel中的属性映射到Model,有一些工具,比如ValueInjecter,值得一看。