如何更新已跟踪的实体

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 或其他。