首页 > 解决方案 > 如何模拟 LocalView

问题描述

在我的代码中,我检查了 DbSet 的 Local 属性,以查看哪些实体已添加到 DbContext 但尚未提交到数据库。我现在需要模拟这个属性,但看起来我不能。这意味着当我测试我的代码时,它会因为 Local 属性为空而失败。任何想法我怎么能做到这一点?我已经添加了我当前用于生成下面的模拟 dbset 的代码,其中包括用于生成 LocalView 的代码,但是当您调用构造函数时这会失败并出现 NotImplementedException()。

我正在使用最新版本的 .Net Core 和 Entity Framework。

干杯马克

var localDbSet = new Mock<DbSet<TEntity>>();
var localList = new List<TEntity>().AsQueryable();
var mockDbSet = new Mock<DbSet<TEntity>>();
var queryableData = list.AsQueryable();

localDbSet.As<IQueryable<TEntity>>().Setup(m => m.Provider).Returns(localList.Provider);
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.Expression).Returns(localList.Expression);
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.ElementType).Returns(localList.ElementType);
localDbSet.As<IQueryable<TEntity>>().Setup(m => m.GetEnumerator()).Returns(localList.GetEnumerator());

mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.Provider).Returns(queryableData.Provider);
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.Expression).Returns(queryableData.Expression);
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.ElementType).Returns(queryableData.ElementType);
mockDbSet.As<IQueryable<TEntity>>().Setup(m => m.GetEnumerator()).Returns(queryableData.GetEnumerator());
mockDbSet.Setup(d => d.Add(It.IsAny<TEntity>()));

// This fails with a NotImplementedException
var localView = new LocalView<TEntity>(localDbSet.Object);
mockDbSet.Setup(d => d.Local).Returns(localView);

标签: c#entity-framework-coremoq

解决方案


推荐阅读