EF实体的更新,一般常用的都是直接修改实体的状态,改为修改状态,让EF处理过程中变为Update语句
Context.Entry(entity).State = EntityState.Modified;
但是在NOP的源码中,他们所使用的修改更为简洁
1 /// <summary> 2 /// Update entity 3 /// </summary> 4 /// <param name="entity">Entity</param> 5 public virtual void Update(T entity) 6 { 7 try 8 { 9 if (entity == null) 10 throw new ArgumentNullException("entity"); 11 12 this._context.SaveChanges(); 13 } 14 catch (DbEntityValidationException dbEx) 15 { 16 throw new Exception(GetFullErrorText(dbEx), dbEx); 17 } 18 }
直接使用了DbContext中的SaveChanges() 来保存
之所有直接调用SaveChanges()就能保存,是因为在取出的实体是带跟踪状态的实体.
相反,
如果用AsNoTracking()取出实体,再进行保存,EF会把这个实体当做全新的实体去保存,也就无法更新.
AsNoTracking()可以提高查询效率,但是无法更新,使用时应该注意