在实体框架中使用AttachTo不起作用

本文关键字:AttachTo 不起作用 实体 框架 | 更新日期: 2023-09-27 17:58:49

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

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

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

没有错误显示,只是不保存数据。有人知道为什么吗?

在实体框架中使用AttachTo不起作用

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

我相信您希望通过单列进行修改。你可以试试.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();
    }