c# - 无法在 DbSet 测试替身上调用 AddRange
问题描述
我正在重构一段遗留代码以使其更具可测试性。其中一部分是实现实体框架的测试替身DbSet
。我已经按照这里的步骤https://docs.microsoft.com/en-us/ef/ef6/fundamentals/testing/writing-test-doubles并且工作正常。
现有的类使用AddRange
,所以我向 TestDbSet 类添加了一个覆盖。
public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
foreach (var entity in entities)
{
yield return Add(entity);
}
}
我试着叫它
myDbContext.Persons.AddRange(newPersons);
但是AddRange
永远不会被调用。如果我注释掉AddRange
,我会NotImplementedException
从 DbSet 类中得到一个。
我从头开始了一个新项目AddRange
并按预期工作。所以我的项目中一定有一些干扰它的东西,但是我无法确定原因。
什么可以阻止我在派生类中调用我的覆盖DbSet
?
我现在的工作是使用 Add 代替。
解决方案
所以我搞砸了并删除了产量声明。突然它起作用了。不知道为什么。
public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
foreach (var entity in entities)
{
_data.Add(entity);
}
return entities;
}
推荐阅读
- reactjs - 如何将我的 Docker React 容器配置为仅在需要时安装模块?
- c - VS code c 编程,我该如何修复-Makefile:2: *** 缺少分隔符。停止。?
- amazon-web-services - 跨 AWS 账户的 DynamoDB 复制
- javascript - 在搜索文本时隐藏 h4
- python - 在重新加载不同目录中以编程方式导入的文件时找不到 ModuleSpec
- python-3.x - 如何与龙卷风 IOLoop 同时运行长时间运行的阻塞功能
- r - 不应该在 org 模式下以 R 代码块打印的输出
- javascript - 将 Select 的选项替换为 Checkbox
- html - 如何使用 Div 在页面上格式化 2 个不同的表格?
- android-studio - Android Studio 不显示 Flutter 源代码