gdp*_*gdp 0 nhibernate asp.net-mvc viewmodel
下面是场景:我有一个像这样的User对象:
public class User : BaseEntity<User>, IAggregateRoot
{
public virtual string Name { get; set; }
public virtual string Username { get; set; }
public virtual string Password { get; set; }
public virtual string SecretQuestion { get; set; }
public virtual string SecretAnswer { get; set; }
public virtual DateTime LastLogin { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在编辑这个对象的过程中,我将它加载到视图中,但我只想更新一些属性(即我不想更新LastLogin属性).在这种情况下,我该怎么办?
是创建用户视图模型的最佳策略,当我尝试使用null LastLogin字段更新用户对象时,nhibernate是否应对此问题?
提前致谢.
编辑
像这样的东西:
public class UserViewModel
{
public string Name {get;set;}
public string UserName {get;set;}
public string Password {get;set;}
public string SecretQuestion {get;set;}
public string SecretAnswer {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
然后编辑:
public ActionResult Edit(int id)
{
return View(_userRepository.FindById(id));
}
[HttpPost]
public ActionResult Edit(int id, UserViewModel userViewModel)
{
try
{
//Not sure how to update the model
//with the view Model and save.
_userRepository.Update(????);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
一种好方法是创建一个UserViewModel仅包含要显示/更新的属性.不要让nHibernate知道视图模型.然后,当编辑回发到控制器时,您从nHibernate检索实际的User对象,从视图模型更新它的属性,然后将其保存回数据库.
更新
像这样的东西:
[HttpPost]
public ActionResult Edit(int id, UserViewModel userViewModel)
{
try
{
User model = _userRepository.FindById(id);
model.Name = userViewModel.Name;
model.Username = userViewModel.Username;
model.Password = userViewModel.Password;
model.SecretQuestion = userViewModel.SecretQuestion;
model.SecretAnswer = userViewModel.SecretAnswer;
_userRepository.Update(model);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
在我最近一直在研究的项目中,我创建了一个ViewModelBase类,该类包含将属性从域模型映射到视图模型的方法,并根据属性名称和类型的匹配再次返回.我的所有视图模型都是从ViewModelBase派生的.
还有像AutoMapper这样的工具可以做很多这样的事情.
| 归档时间: |
|
| 查看次数: |
3013 次 |
| 最近记录: |