假如说有个实体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;有没有其他办法处理这种情况?
建议使用EntityFramework.Extended,参考:EntityFramework.Extended用EF实现指定字段的更新
因为要用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();
不知有没有遇到EF查询需要左联 又需要返回iqueryable 结果集的状况?
ef6还是 ef5
这是ef6的特性
ef5不支持
是的,用的EF6