EF部分字段修改 自动忽略为null字段

传入一个实体 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;
            }
        }

 

                解决完瞬间 晴天了                         

 

分享给大家              

posted @ 2019-06-16 16:58  Jorenoe  阅读(1080)  评论(0编辑  收藏  举报