首页新闻找找看学习计划

MVC4+EF5修改数据的问题

0
悬赏园豆:20 [已解决问题] 解决于 2014-03-03 16:38

通过右击Controller生成的修改代码,在前台使用修改功能时可以正常修改数据,但是为什么我自己从数据库读取一个对象,然后把对象中的某个值修改了,再提交到EF中去,结果还是原来的数据,代码如下:

  public int Modify(T model, params string[] proNames)
        {
            //4.1将 对象 添加到 EF中
            DbEntityEntry entry = db.Entry<T>(model);
            //4.2先设置 对象的包装 状态为 Unchanged
            entry.State = System.Data.EntityState.Unchanged;
            //4.3循环 被修改的属性名 数组
            if (proNames.Length > 0)
            {
                foreach (string proName in proNames)
                {
                    //4.4将每个 被修改的属性的状态 设置为已修改状态;后面生成update语句时,就只为已修改的属性 更新
                    entry.Property(proName).IsModified = true;
                }
            }
            else
            {
                entry.State = System.Data.EntityState.Modified;
            }
            //4.4一次性 生成sql语句到数据库执行
            return db.SaveChanges();
        }

无论是设置了proNames还是没有设置,结果都一样,加断点后发现上面代码的model的确改变了,不知道为什么结果还是原来的数据,在SQLProfiler中得到SQl语句就是更新数据为数据库中数据而不是新的数据,求高手指导还有什么问题?

ef
happydaily的主页 happydaily | 小虾三级 | 园豆:544
提问于:2014-03-02 21:26
< >
分享
最佳答案
0

用db.Set<T>().Attach(model)试试

收获园豆:20
dudu | 高人七级 |园豆:39077 | 2014-03-02 22:01

在第二行加上可以了,谢谢Dudu。我还想知道第一段代码不是已经将对象添加到EF中,而且在Edit.cshtml修改数据没有问题。通过加断点发现代码中的model,在使用edit.cshtml修改时是实体本身,而自己手动读取的时是实体代理类,是这个问题产生的吗?

happydaily | 园豆:544 (小虾三级) | 2014-03-03 08:16

@happydaily: 不仅要将对象添加到EF,还要让EF跟踪这个对象的状态变化

dudu | 园豆:39077 (高人七级) | 2014-03-03 11:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册