如何更新已跟踪的实体
How to update already tracked entity
您好,我遇到了以下问题:
我正在使用 EF Core
检索实体,然后在交易中我尝试 update
它。
如果我尝试将 entity state
更改为 MODIFIED
之后 我从数据库中检索它,update
会抛出异常。
我后来了解到,如果我从上下文中获取实体,那么此时它已经被跟踪,所有进一步的更新不需要暗示更改 entity state
。
基于下面代码中的这个假设,我在最后评论了状态 change.Unfortunately 如果我调用 SaveChanges
.
,实体不会得到 updated.Even
public void SomeMethod(DbContext context)
{
var entity=this.context.Find([some entity]); // the entity is started to get tracked
using(var tran=this.context.BeginTransaction())
{
try
{
//do some modifications on entity
// entity.Field1="tt";
// entity.Field2="ttx";
//this.context(entity).State=State.Modified -> throws exception saying entity is already tracked
this.context.SaveChanges();
tran.Commit(); // entity is not updated in the database !
}catch
{
tran.Rollback();
}
}
}
P.S 除此之外我还尝试先将实体状态更改为 Detached
然后 Modified
。它仍然抛出异常在 Modified
行。
有人可以告诉我如何对已跟踪的实体执行更新吗?
更新
我也试过没有交易,仍然没有得到被跟踪的实体changed.So这基本上不保存更改:
var entity=this.context.Find([some entity]);
//do some changes on entity without changing the entity state
this.context.SaveChanges();
更新 2
显然问题出在 updates.I 不只是设置字段。
我确实在某个地方创建了一个新实体。
问题是因为我在我的代码中实例化了一个新实体,而这个新实体没有被跟踪,而且......我期待它在数据库中弹出。
一旦我更改为正在跟踪的实体,更新就成功了,无需将其状态更改为 Modified
或其他。
您好,我遇到了以下问题:
我正在使用 EF Core
检索实体,然后在交易中我尝试 update
它。
如果我尝试将 entity state
更改为 MODIFIED
之后 我从数据库中检索它,update
会抛出异常。
我后来了解到,如果我从上下文中获取实体,那么此时它已经被跟踪,所有进一步的更新不需要暗示更改 entity state
。
基于下面代码中的这个假设,我在最后评论了状态 change.Unfortunately 如果我调用 SaveChanges
.
public void SomeMethod(DbContext context)
{
var entity=this.context.Find([some entity]); // the entity is started to get tracked
using(var tran=this.context.BeginTransaction())
{
try
{
//do some modifications on entity
// entity.Field1="tt";
// entity.Field2="ttx";
//this.context(entity).State=State.Modified -> throws exception saying entity is already tracked
this.context.SaveChanges();
tran.Commit(); // entity is not updated in the database !
}catch
{
tran.Rollback();
}
}
}
P.S 除此之外我还尝试先将实体状态更改为 Detached
然后 Modified
。它仍然抛出异常在 Modified
行。
有人可以告诉我如何对已跟踪的实体执行更新吗?
更新 我也试过没有交易,仍然没有得到被跟踪的实体changed.So这基本上不保存更改:
var entity=this.context.Find([some entity]);
//do some changes on entity without changing the entity state
this.context.SaveChanges();
更新 2 显然问题出在 updates.I 不只是设置字段。 我确实在某个地方创建了一个新实体。
问题是因为我在我的代码中实例化了一个新实体,而这个新实体没有被跟踪,而且......我期待它在数据库中弹出。
一旦我更改为正在跟踪的实体,更新就成功了,无需将其状态更改为 Modified
或其他。