0

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

注意该属性entitySetName提供了对象附加到的表的名称

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

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

4

2 回答 2

2

AttachTo在 state 中将实体添加到上下文中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();
}
于 2013-02-11T22:12:17.823 回答
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();
    }
于 2013-02-11T23:30:59.807 回答