首页新闻找找看学习计划

EF中更新部分字段如何处理?

0
悬赏园豆:5 [已解决问题] 解决于 2016-08-14 00:58

假如说有个实体UserInfo ,其中的UserId是主键,定义个实体如下

UserInfo userInfonew = new UserInfo()

{
UserId=userInfo.UserId,
Email = userInfo.Email,
FirstName = userInfo.FirstName,
LastName = userInfo.LastName,
LastUpdateBy = GetCurrentUserGuid(),
LastUpdate = DateTime.Now
};   

如果全部字段需要更新可以使用如下方法:

 db.Entry(userInfonew).State = EntityState.Modified;

db.SaveChanges();

假如我们想更新部分字段,如只想更新Email的信可以采用以下方法

db.UserInfoes.Attach(userInfonew);

db.Entry(userInfonew).Property(x => x.Email).IsModified = true;

db.SaveChanges();

      但是有个问题如果我们这个实体字段很多,比如说有20个字段,想更新其中18个字段,那不可能这18个字段都要定义一遍db.Entry(userInfonew).Property(x => x.field).IsModified = true;有没有其他办法处理这种情况?

tuohaibei的主页 tuohaibei | 初学一级 | 园豆:77
提问于:2016-07-30 16:38
< >
分享
最佳答案
1

建议使用EntityFramework.Extended,参考:EntityFramework.Extended用EF实现指定字段的更新

收获园豆:5
dudu | 高人七级 |园豆:39190 | 2016-07-30 17:41

      因为要用EF的tracking log(具体功能是覆写SaveChanges()来实现具体逻辑)所以不能使用EntityFramework.Extended,之前使用它的delete()方法来直接删除捕获不到trackinglog相关信息。此问题使用以下方式解决

db.Entry(model).State = EntityState.Modified;

db.Entry(model).Property(x => x.Token).IsModified = false;

db.SaveChanges();

tuohaibei | 园豆:77 (初学一级) | 2016-07-31 01:17

不知有没有遇到EF查询需要左联 又需要返回iqueryable 结果集的状况?

Постой! | 园豆:809 (小虾三级) | 2016-08-01 10:28
其他回答(1)
0

ef6还是 ef5 

这是ef6的特性 

ef5不支持

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2016-08-03 17:15

是的,用的EF6

支持(0) 反对(0) tuohaibei | 园豆:77 (初学一级) | 2016-08-05 19:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册