EF4.1码 – 首先,大师!
我想知道是否有一种更优雅的方式来处理以下ASP.NET MVC 3 EF 4.1 Code First场景:假设我们有以下POCO:
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字段,因为它们将在存储库中设置而不是由用户设置.
在我的存储库中,我有以下Update方法.这些方法除了应该更新的字段列表(将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?
我非常感谢你的帮助!
里斯
解决方法
是的,有更优雅的版本:
public void Update(Person person,params Expression<Func<Person,object>>[] properties) { context.People.Attach(person); DbEntityEntry<Person> entry = context.Entry(person); foreach (var property in properties) { entry.Property(property).IsModified = true; } person.ModifiedOn = DateTime.Now; }
[HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { personRepository.Update(person,p => p.FirstName,p => p.LastName,p => p.Birthday); personRepository.Save(); return RedirectToAction("Index"); } else { return View(person); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。