传入一个实体 student(){id = 1,name = "测试" age = null,sex = null}
下面 是修改的方法
public async Task EditAsync(T model, bool IsSava = true) { _Db.Configuration.ValidateOnSaveEnabled = false; //关闭验证 _Db.Entry(model).State = EntityState.Modified; if (IsSava) { await _Db.SaveChangesAsync(); _Db.Configuration.ValidateOnSaveEnabled = true; } }
这样搞的话 如果有为空的 字段直接 报错了
搞了老半天 当时心情 一万个CNM
然后 我们 来 这样解决
使用反射 获取属性是否 为空的设置 IsModeifde = fase 不为空的设置 IsModefide = true;
看代码吧
public async Task EditAsync(T model, bool IsSava = true) { _Db.Configuration.ValidateOnSaveEnabled = false; _Db.Entry(model).State = EntityState.Modified; foreach (var item in model.GetType().GetProperties()) { if (item.GetValue(model) != null) { _Db.Entry(model).Property(item.Name).IsModified = true; } else { _Db.Entry(model).Property(item.Name).IsModified = false; } } if (IsSava) { await _Db.SaveChangesAsync(); _Db.Configuration.ValidateOnSaveEnabled = true; } }
解决完瞬间 晴天了
分享给大家