我有一个模特:
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,我该怎么办?
答案 0 :(得分:2)
创建视图时,请不要选择数据库上下文。手动处理,以便Visual Studio不会自动更改您的上下文类。
当您创建一个选择ViewModel和数据库上下文的视图时,Visual Studio将打开上下文文件并为ViewModel添加DbSet条目,因为它不存在。如果你不选择它就不会做任何事情,那么你可以控制你的文件。
作为一个副节点,要将ViewModel中的属性映射到Model,有一些工具,比如ValueInjecter,值得一看。