首页 新闻 搜索 专区 学院

EF如何写update方法

0
[待解决问题]
public void UpdateWithLog(T entity, Guid creatorGuid)
        {
            dbContext.Entry(entity).State = EntityState.Modified;
            //dbContext.Set<T>().Attach(entity);
            //dbContext.Entry(entity).State = EntityState.Modified;
            dbContext.Set<ModelLog>().Add(GetModelLog(entity, creatorGuid, "Update"));
        }

如上方法报错:

 

 

 

具体操作过程:

Find----序列化-----反序列化-----修改model值----update

 

求助,该如何写EF的Update方法。

快乐鸟的主页 快乐鸟 | 初学一级 | 园豆:7
提问于:2014-04-14 17:20
< >
分享
所有回答(2)
0

http://blogs.msdn.com/b/cesardelatorre/archive/2008/09/04/updating-data-using-entity-framework-in-n-tier-and-n-layer-applications-short-lived-ef-contexts.aspx

arg | 园豆:1047 (小虾三级) | 2014-04-15 15:23

请仔细看清楚我在说什么。

支持(0) 反对(0) 快乐鸟 | 园豆:7 (初学一级) | 2014-04-18 10:01

@快乐鸟: 那我只能呵呵了

支持(0) 反对(0) arg | 园豆:1047 (小虾三级) | 2014-04-19 17:45
1

你为何要去碰EF的底层更新方法呢?每个实体从EF的DBContext后会被生成一个动态代理,实体的自身属性的改变是被跟踪(StateTracking)的,你将实体查出来直接对某个属性赋值后调用DbContext.SaveChanges() 后EF会自动保存了。

你上面错误是由于你的实体是从另一个DBContext实例中取出,而在另一个DBContext实例上Attach所以导致更新冲突的,如果一定要这样写的话,可能这样可以有些帮助。

 

var modifiedEntity = dbContext.Entry(entity);

dbContext.Set<ModelLog>.Attach(modifiedEntity);

modifiedEntity.State = EntityState.Modified; 

dbContext.SaveChanges();

 

你原有的代码已经使用Attach挂上了实体的状态,而你又调用Add,这当然是出问题了。

Ray Liang | 园豆:426 (菜鸟二级) | 2014-07-09 11:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册