4
EF4.1-Code-First-Gurus!部分使用EF Code First和ASP.NET MVC更新对象
我不知道是否有处理以下ASP.NET MVC 3 EF 4.1代码第一种情形更优雅的方式:可以说,我们有以下波苏斯:
public class Entity
{
[Key]
public int Id { get; set; }
[ScaffoldColumn(false)]
public DateTime CreatedOn { get; set; }
[ScaffoldColumn(false)]
public DateTime ModifiedOn { get; set; }
}
和
public class Person : Entity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime Birthday { get; set; }
}
假设我们已经创建了一些标准的编辑视图,它们不包括CreatedOn/ModifiedOn字段,因为它们将在存储库中而不是由用户设置。
在我的信息库中,我有以下更新方法。该方法节选字段列表,它应该被更新(离开CreatedOn/ModifiedOn领域出):
public void Update(Person person, List<string> properties)
{
Person tmpPerson = context.People.Single(x => x.Id == person.Id);
context.People.Attach(tmpPerson);
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(person))
{
if (properties.Contains(descriptor.Name))
descriptor.SetValue(tmpPerson, descriptor.GetValue(person));
}
tmpPerson.ModifiedOn = DateTime.Now;
}
现在控制器调用此方法是这样的:
[HttpPost]
public ActionResult Edit(Person person)
{
if (ModelState.IsValid) {
personRepository.Update(person, new List<string> { "FirstName", "LastName", "Birthday"});
personRepository.Save();
return RedirectToAction("Index");
} else {
return View();
}
}
这一切工作像魅力。但是,我真的不喜欢,我必须手动指定字段。你将如何处理这个要求?当然,我可以将CreatedOn/ModifiedOn字段作为隐藏字段添加到视图中,但我不想将表单加载到很多(有更多的字段)。
也许这是一个类似的问题: How To Update EF 4 Entity In ASP.NET MVC 3?
我非常感谢您的帮助! 里斯
运行完美。非常感谢你!祝你有个愉快的一天,乔里斯 – 2011-05-02 21:29:55