代码之家  ›  专栏  ›  技术社区  ›  Jamie Rees

实体框架更新记录问题(无法为属性调用成员“IsModified”)

  •  3
  • Jamie Rees  · 技术社区  · 11 年前

    我在使用实体框架6更新记录时遇到一些问题。

        public bool UpdateOrder(Order order)
        {
            Db.Orders.Attach(order);
            var entry = Db.Entry(order);
            entry.Property(x => x.OrderStatusId).IsModified = true; //Exception thrown
            try
            {
                Db.SaveChanges();
            }
            catch (Exception e)
            {
                logger.Fatal(e);
            }
            return true;
        }
    

    这是异常消息:

    无法为属性“OrderStatusId”调用成员“IsModified”,因为上下文中不存在“Order”类型的实体。要向上下文中添加实体,请调用DbSet的add或Attach方法。

    我试过换衣服 entry.Property(x => x.OrderStatusId).IsModified = true; 到 entry.State = EntityState.Modified; 但我的记录没有更新。有什么办法帮你吗?

    很抱歉,如果这是显而易见的,但我刚开始使用EF,我找不到如何解决这个问题。

    2 回复  |  直到 11 年前
        1
  •  5
  •   Jamie Rees    11 年前

    我通过以下方式修复了它:

    public bool UpdateOrder(Order order)
        {
    using(var db = DB){
                db.Orders.Attach(order);
                var entry = db.Entry(order);
                entry.Property(x => x.OrderStatusId).IsModified = true; //Exception thrown
                try
                {
                    db.SaveChanges();
                }
                catch (Exception e)
                {
                    logger.Fatal(e);
                }
                return true;
    }
            }
    
        2
  •  0
  •   Viktar Tserashchuk    11 年前

    异常的原因可能是“order”对象的Id字段(主键)中的默认值。对于int,它是0。在这种情况下,“order”被视为一个新对象,应使用“add”方法添加。