使用实体框架中的附件不起作用

时间:2013-02-11 10:25:45

标签: c# entity-framework

我有一个通用的CRUD存储库,使用AttachTo将更新的对象附加到ObjectContext,如下所示:

N.B。属性entitySetName提供对象附加到的表的名称

    public virtual void Save(TModel t)
    {
            TModel unboxed = (TModel)t;
            db.AttachTo(entitySetName, unboxed);
            db.SaveChanges();
    }

没有错误显示,只是没有保存数据。谁能明白为什么?

2 个答案:

答案 0 :(得分:2)

AttachTo将一个实体添加到状态Unchanged中的上下文中。当你立即调用SaveChanges后,没有任何内容得到更新,因为 - 从EF的角度来看 - 实体是“未更改的”。

您需要将状态设置为Modified以告知EF属性已更改并应写入数据库:

public virtual void Save(TModel t)
{
        TModel unboxed = (TModel)t;
        db.AttachTo(entitySetName, unboxed);
        db.ObjectStateManager.ChangeObjectState(unboxed, EntityState.Modified);
        db.SaveChanges();
}

答案 1 :(得分:1)

我相信您想要通过单个列进行修改。您可以尝试.Attach

    public virtual void Save(TModel t)
    {
        db.SystemUserLogs.Attach(t);
        //db.Entry(t).State = EntityState.Modified; //<--- For whole fields modifier

        db.Entry(t).Property(x => x.entitySetName).IsModified = true; //<--- For one field modifier
        db.SaveChanges();
    }