ef更新部分字段

来源:互联网 发布:网络英语老师 编辑:程序博客网 时间:2024/05/17 02:13

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();            }        }









0 0
原创粉丝点击