将 Effort 与 EF 扩展结合使用,其中 BulkContains 会抛出 System.Exception

问题描述 投票:0回答:1

我正在尝试对一个相当简单的存储库方法进行单元测试,该方法检索与提供的任何字符串映射 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

c# effort entity-framework-extensions
1个回答
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.()
    
© www.soinside.com 2019 - 2024. All rights reserved.