火焰

valeb
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

EF 指定字段修改

Posted on 2017-05-10 17:58  valeb  阅读(368)  评论(0编辑  收藏  举报
 public virtual void Modify(T model, params string[] ProNames)
        { 
            DbEntityEntry entry = db.Entry<T>(model);
            entry.OriginalValues.SetValues(model);  // 没有此句修改不了
            entry.State = System.Data.EntityState.Unchanged; 
            foreach (string Name in ProNames)
            {
                entry.Property(Name).IsModified = true;
            }
            //return db.SaveChanges(); 
        }
                 
                         
        public virtual void Modify(T model, Expression<Func<T, bool>> whereLambda, params string[] ModifiedProNames)
        {
            List<T> listModifeding = db.Set<T>().Where(whereLambda).ToList();
            listModifeding.ForEach(s =>
            {
                Modify(model, ModifiedProNames);
            });

            #region 重构前
            //Type t = typeof(T);
            //List<PropertyInfo> proInfo = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
            //Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>();

            //proInfo.ForEach(p =>
            //    {
            //        if (ModifiedProNames.Contains(p.Name))
            //        {
            //            dictPros.Add(p.Name, p);
            //        }
            //    });

            //foreach (string Name in ModifiedProNames)
            //{
            //    if (dictPros.ContainsKey(Name))
            //    {
            //        PropertyInfo PInfo = dictPros[Name];
            //        object NewValue = PInfo.GetValue(model, null);
            //        foreach (T us in listModifeding)
            //        {
            //            PInfo.SetValue(us, NewValue, null);
            //        }
            //    }
            //} 
            #endregion

            ////return db.SaveChanges();
        }
EF Modify