在实体框架中使用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
将一个实体添加到状态为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();
}