c# - 如何模拟 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);
解决方案
推荐阅读
- linux - 当您调用 select(2) 时,内核如何确定套接字已准备好?
- python - 将参数传递给 torndb.query()
- postgresql - Postgres 驱动程序 Gradle 项目
- java - 将服务器服务部署到 AWS EC2 实例:如何配置 ApplicationStart 和 ApplicationStop
- python - Keras:“使用前必须编译模型”尽管使用了 compile()
- sas - SAS:合并 proc sql 和数据步骤
- dart - 在文本小部件中使用变量
- vba - 如何将一个范围从三个独立的范围移到一个范围内
- python - Pandas 多数据集绘图错误
- javascript - 如何将查询的数据(通过帖子)放在我的 jquery 图表上?