Entity framework 如何更新已跟踪的实体

Entity framework 如何更新已跟踪的实体,entity-framework,tracking,dbcontext,Entity Framework,Tracking,Dbcontext,您好,我有以下问题: 我使用EF-Core检索一个实体,然后在事务中尝试更新它。 如果我从数据库中检索到实体状态后,尝试将实体状态更改为已修改的,则更新将引发异常 我后来了解到,如果我从上下文中获取实体,它在该点上已经被跟踪,并且所有进一步的更新都不需要意味着更改实体状态 基于下面代码中的这一假设,我已经对状态更改进行了注释。不幸的是,最后实体没有得到更新。即使我调用SaveChanges public void SomeMethod(DbContext context) { var en

您好,我有以下问题:

我使用
EF-Core
检索一个实体,然后在事务中尝试
更新它。
如果我从数据库中检索到
实体状态后,尝试将
实体状态更改为
已修改的
,则
更新将引发异常

我后来了解到,如果我从上下文中获取实体,它在该点上已经被跟踪,并且所有进一步的更新都不需要意味着更改
实体状态

基于下面代码中的这一假设,我已经对状态更改进行了注释。不幸的是,最后实体没有得到更新。即使我调用
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除此之外,我还尝试先将实体状态更改为
distached
,然后更改为
Modified
。它仍然在
Modified
行上抛出异常

有人能告诉我如何对已跟踪的实体执行更新吗

更新 我也尝试过不使用事务,但仍然没有更改跟踪的实体。因此,这基本上不会保存更改:

var entity=this.context.Find([some entity]);
//do some changes on entity without changing the entity state
this.context.SaveChanges();
更新2 显然问题出在更新上。我不仅仅是设置字段。
我确实在某个地方创建了一个新实体。

问题是因为我在代码中实例化了一个新实体,而这个新实体没有被跟踪,并且。。。我期待着它在数据库中弹出。
一旦我更改为正在跟踪的实体,更新就成功了,无需将其状态更改为
已修改
或其他状态。

您能否在代码中包含一个简单的示例,说明您正在进行的修改会导致您描述的行为?在您进行更改的方式中可能有一些特定的内容。我只是设置了一个字符串。在执行
SaveChanges
之前,实体看起来正常,但更改不会保存到数据库中。如果这是您所想的,我不会创建新对象。我没有指向另一个要清除的对象。我只更改字段。如果您更改查询以查找类型,是否有效,例如:var entity=this.context.MyEntityType.Find(entityId)?我已经解决了这个问题。代码在不需要更改状态的情况下关闭。该对象没有在数据库中更新,因为我在代码中的某个地方引用了一个新对象作为跟踪的实体