ef更新部分字段

4 篇文章 0 订阅

ef更新字段的方式有两种:

1.就是把实体直接查询出来修改部分字段,在附加到ef上,如下:

using (ZDPORTALEntities1 db = new ZDPORTALEntities1())
{

     News n = db.News.FirstOrDefault();
     if (n != null)
     {
        n.N_Title = "C#简介";
        db.Set<News>().Attach(n);
        db.Entry<News>(n).State = EntityState.Modified;
        db.SaveChanges();
     }

}

这是比较常见的修改方式,但是有个缺点,每次修改实体的时候都要查一遍数据库,麻烦不说,影响执行速度。

2.不需要先把数据查询出来,但是要制定主键列标识的属性名称,这里有两种方法,如下:

方法一:

using (ZDPORTALEntities1 db = new ZDPORTALEntities1())
       {
                News news = new News() { N_ID = Guid.Parse("c3967fb9-cdb5-4ba0-b463-e7c7a2b73d20"), N_Title="C#简介132" };
                DbEntityEntry<News> entry = db.Entry<News>(news);
                entry.State = EntityState.Unchanged;
                entry.Property(t => t.N_Title).IsModified = true; //设置要更新的属性
                db.SaveChanges();       
       }


 
 
 
 

还有一种方法如下:

using (ZDPORTALEntities1 db = new ZDPORTALEntities1())
            {
                News news = new News() { N_ID = Guid.Parse("c3967fb9-cdb5-4ba0-b463-e7c7a2b73d20"), N_Title="C#简介132" };
                db.News.Attach(news);
                var stateEntry = ((IObjectContextAdapter)db).ObjectContext.
                    ObjectStateManager.GetObjectStateEntry(news);
                stateEntry.SetModifiedProperty("N_Title");
                db.SaveChanges();
            }

可以封装一下,进行复用:

/// <summary>
/// 更新指定字段
/// </summary>
/// <param name="entity">实体</param>
 /// <param name="fileds">更新字段数组</param>
 public void UpdateEntityFields(T entity, List<string> fileds)
        {
            if (entity != null&&fileds!=null)
            {
                dbContext.Set<T>().Attach(entity);
                var SetEntry = ((IObjectContextAdapter)dbContext).ObjectContext.
                    ObjectStateManager.GetObjectStateEntry(entity);
                foreach (var t in fileds)
                {
                    SetEntry.SetModifiedProperty(t);
                }
               dbContext.SaveChanges();
            }
        }









  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值