首页新闻找找看学习计划

ASP.NET MVC和EF4:如何只更新需要字段

0
悬赏园豆:10 [待解决问题]

比如数据表User映射成User实体类,有如下属性

Id, FullName, EmailAddress, Fax, Tel

 

网页表单我只更新Email和Fax两属性,我在Controller里面用User类作为参数接收值,

public ActionResult Edit(User user) {}

一般的做法就是这样做提交更改:

var _user = GetUsers().Where(a => a.Id == user.Id).SingleOrDefault();

_user.Fax = user.Fax;
_user.EmailAddress = user.EmailAddress;

context.SaveChanges();

 

如果属性非常多的时候,我觉得这样做非常繁琐,若采用这样更新所有实体,若数据表有非空的字段将不允许这样做,将抛出异常。

var _user = GetUsers().Where(a => a.Id == user.Id).SingleOrDefault();
context.ApplyCurrentValues(_user.EntityKey.EntitySetName, user);
context.SaveChanges();

@GB的主页 @GB | 初学一级 | 园豆:190
提问于:2010-12-13 15:35
< >
分享
所有回答(3)
0

属性映射的时候,可以设置允许非空字段呀。

Astar | 园豆:40805 (高人七级) | 2010-12-15 20:38
我知道,但是就是需要更新其他某些字段,而不需要更新所有字段(包括非空)呢?
支持(0) 反对(0) @GB | 园豆:190 (初学一级) | 2010-12-16 08:48
1
public void Update(int? id)
{
using(var db = new BestEntities()) {
var Query = db.xx.Where(xxx).FirstOrDefault();
if(TryUpdateModel(Query)) {
db.SaveChanges();
}
}
}
Y2zz | 园豆:388 (菜鸟二级) | 2011-12-04 01:52
0

使用伪包装类对象

DbEntityEntry<T> entry = db.Entry<T>(entity);
entry.State = EntityState.Unchanged;
entry.Property(b => b.xxx).IsModified = true; //设置要更新的属性
db.SaveChanges();
竹墨轩 | 园豆:58 (初学一级) | 2013-04-16 20:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册