我正在尝试对一个相当简单的存储库方法进行单元测试,该方法检索与提供的任何字符串映射 ID 列表相匹配的一些实体。
该实现使用 EF 扩展
WhereBulkContains
,并且我指定 WhereBulkContain
应使用 lambda 进行匹配的实体列。
public List<MyEntity> GetEntitiesByMappingId(List<string> mappingIds)
{
if (!mappingIds?.Any() ?? true)
{
return new List<MyEntity>(0);
}
return this
.context.MyEntity
.AsNoTracking()
.Include(e => e.ExtraData)
.Include(e => e.OtherData)
.WhereBulkContains(mappingIds, e => e.MappingId)
.ToList();
}
当我的测试触发此方法时,它会失败并出现以下底层异常。
System.Exception
Oops! The `SkipInsertForInternalFeatures` option is only available for SQL Server, and PostgreSQL.
at Z.BulkOperations.BulkOperation.()
at Z.BulkOperations.BulkOperation.Execute()
at Z.EntityFramework.Extensions.EntityBulkOperation`1.BulkInsert()
at .BulkInsert[T](BulkOperation`1 this, DbContext context, List`1 list, Boolean isManager, List`1 entitiesToUpdate, Type type, String typeName)
at .BulkInsert[T](DbContext this, BulkOperation`1 bulkOperation, IEnumerable`1 entities2, List`1 entitiesToUpdate)
at DbContextExtensions.BulkInsert[T](DbContext this, IEnumerable`1 entities, Action`1 bulkOperationFactory)
at Z.EntityFramework.Plus.WhereBulkContainsBuilder`1.BulkCopy(DbContext context, List`1 keyNames, IEnumerable`1 entities, Type type2)
at Z.EntityFramework.Plus.WhereBulkContainsBuilder`1.WhereBulkContains(DbContext context, String commandText, List`1 commandTableBuilders, Boolean isNotCTE, Boolean isNotSelectOnly)
at Z.EntityFramework.Plus.QueryHookCommandInterceptor.ApplyHook(DbCommand command, DbContext context, String hook, Boolean isNotCTE)
at Z.EntityFramework.Plus.QueryHookCommandInterceptor.ReaderExecuting(DbCommand command, DbCommandInterceptionContext`1 interceptionContext)
at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
这是 Effort 的已知限制吗?或者我错过了一些应该允许它工作的配置?
我正在使用 Z.EntityFramework.Extensions 和 Z.EntityFramework.Plus.EF6 的 Effort.EF6 版本 2.2.17 以及版本 8.103.0
来自
NuGet 包的
Z.EntityFramework.Extensions
支持的提供程序列表:
支持:SQL Server、MySQL、Oracle、PostgreSQL、SQLite 等等!
以及来自 github 存储库:
支持多个 SQL 提供程序:
- SQL Server 2008+
- SQL Azure
- SQL 紧凑
- MySQL
- SQLite
- PostgreSQL
- 甲骨文
Effort.EF6 未在任一支持的提供商中列出。
这解释了您收到的异常消息:
System.Exception
Oops! The `SkipInsertForInternalFeatures` option is only available for SQL Server, and PostgreSQL.
at Z.BulkOperations.BulkOperation.()