c# - 从 DbContext 中检索未提交的实体

标签 c# entity-framework dbcontext

如何从 DbContext 中检索未提交的实体?

考虑以下测试:

    [Test]
    public void AddAndRetrieveUncommittedTenant()
    {
        _tenantRepository.Create("testtenant");
        var tenant = _tenantRepository.GetTenantByName("testtenant");

        Assert.AreEqual("testtenant", tenant.Name);
    }

测试失败因为tenantnull .

中间有很多具体的业务代码,归结起来就是:

在我的 Repository类方法 GetTenantByName最后调用GetAll方法。

    public IQueryable<TEntity> GetAll()
    {
        return DbSet.AsQueryable();
    }

    private IDbSet<TEntity> DbSet
    {
        get { return Context.Set<TEntity>(); }
    }

以及扩展 DbContext 的类我有以下方法:

    public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
    {
        return base.Set<TEntity>();
    }

当我在 return base.Set<TEntity>(); 上放置断点时我可以看到该实体在存储库中可用(通过 local 属性)。


enter image description here


如何从我的存储库中检索未提交的实体?

最佳答案

我使用派生自 DbContext 的类并添加以下方法来访问已更改的实体。这还应该告诉您如何访问 DbContext 中更改的实体:

public virtual IEnumerable<DbEntityEntry> ChangedEntities
{
    get { return base.ChangeTracker.Entries().Where(e => e.State != EntityState.Unchanged); }
}

ChangeTrackerDbContext 上的公共(public)属性,因此您也可以从外部类访问此属性:

var dirtyEntities = myDbContext.ChangeTracker.Entries().Where(e => e.State != EntityState.Unchanged);

或者,如果您想查找已添加/修改的实体等,您可以获得更具体的信息:

var addedEntities = myDbContext.ChangeTracker.Entries().Where(e => e.State == EntityState.Added);
var modifiedEntities = myDbContext.ChangeTracker.Entries().Where(e => e.State == EntityState.Modified);

等等。

关于c# - 从 DbContext 中检索未提交的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073380/

相关文章:

c# - 如果 'SubmitChanges' 失败但需要其他提交,如何回滚 DBContext 中的数据更改?

c# - Windows Phone 8.1上的OpenCV

c# - Dapper Multiple Query Read 很慢

C#.NET MVC- HTTP 错误 403.14 - 禁止 Web 服务器配置为不列出此目录的内容

c# - Entity Framework 核心连接字符串 - 环境变量

c# - 实现 IAuthenticationFilter、工作单元和依赖注入(inject)

c# - 同时使用 ObjectContext 和 DbContext

.net - Entity Framework : how to select an int

asp.net - 合并 IdentityDbContext 和 DbContext ASP.NET MVC

c# - EF不会在SaveChanges上更新相关实体