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

时间:2015-03-21 23:01:49

标签: c# entity-framework

我在使用Entity Framework 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 个答案:

答案 0 :(得分:3)

我修理了:

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

答案 1 :(得分:0)

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