重新查找新添加的实体

时间:2019-09-14 17:19:23

标签: c# entity-framework-core

我希望能够不必首先执行DbContext.SaveChanges()就能定位新添加的EF Core实体(我的愿望源于我递归地添加实体,并且需要访问新添加的实体子实体中的实体,并且我希望最大程度地减少数据库更新。

将其放在上下文中,在以下伪代码中,entity2将为null,除非注释行未注释:

var entity1 = DbContext.Assemblies
            .FirstOrDefault( x => x.Name.Equals( assemName, StringComparison.OrdinalIgnoreCase ) );

if( entity1 == null )
{
    entity1 = new AssemblyDb()
    {
        Name = assemName,
    };

    DbContext.Assemblies.Add( retVal );

    //DbContext.SaveChanges();
}

var entity2 = dbUpdater.DbContext.Assemblies
            .FirstOrDefault( x => x.Name.Equals( assemName, StringComparison.OrdinalIgnoreCase ) );

几年前,有一个关于实体框架here的SO讨论。我很想看看在EF Core下是否有一种简单的方法可以达到相同的目的。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作来访问ChangeTracker跟踪的所有条目:

    foreach (EntityEntry entry in context.ChangeTracker.Entries())
    {
         var entityObject = entry.Entity;
    }

更新

尽可能使用Find()。

关于Find的好处是,它查看更改跟踪器,以查看本地上下文中是否已经存在具有该主键的对象,并且它将返回而无需查询数据库。

DbContext.Find

  

查找具有给定主键值的实体。如果上下文正在跟踪具有给定主键值的实体,那么将立即返回该实体,而无需向数据库发出请求。否则,将向数据库查询具有给定主键值的实体,如果找到该实体,则将该实体附加到上下文并返回。如果找不到实体,则返回null。