当 dapper 批量时出错。 "You must explicity set the Provider"



我正在制作一个同步应用程序,从Firebird到SQL Server。 我正在使用Dapper Plus的BulkInsert。

var fbClient = new FirebirdConnect();
using (var source = fbClient.GetConnection())
{
if (source.State == ConnectionState.Closed)
source.Open();
var sqlClient = new AzureConnect();
using (var target = sqlClient.GetConnection())
{
if (target.State == ConnectionState.Closed)
target.Open();
var lastUpdate = connection.Query<DateTime>($"select coalesce((select max(DateSyncTarget) from {metadados.TargetName}), getdate()-10000) LastUpdate").ToList();
var resultSource = source.Query<MyClass>("select * from MyClass");
target.BulkInsert(resultSource.Where(w => w.Data > lastUpdate[0]));
var resultTargert = target.Query<MyClassSource>("select * from MyClass")
source.BulkInsert(resultTargert.Where(w => w.Data > lastUpdate[0]));//Error here
}
}

当我咨询源以在目标中进行插入时,一切都发生得很好。

但是当我查询要插入到源中的目标时,它给出了以下错误:

无法解析提供程序。您必须明确设置 供应商。

对导致错误的原因有所了解?

编辑:

全栈:

em ..(BulkOperation )
em ..(BulkOperation )
em Z.BulkOperations.BulkOperation.BulkInsert()
em Z.Dapper.Plus.DapperPlusAction.Execute()
em Z.Dapper.Plus.DapperPlusAction..ctor(BaseDapperPlusActionSet action, String key, DapperPlusActionKind kind, Object dataSource)
em Z.Dapper.Plus.DapperPlusActionSet`1.AddAction(String mapperKey, DapperPlusActionKind actionKind, TEntity item)
em Z.Dapper.Plus.DapperPlusActionSet`1.DapperPlusActionSetBuilder(IDbConnection connection, IDbTransaction transaction, String mapperKey, DapperPlusActionKind actionKind, TEntity item, Func`2[] selectors)
em Z.Dapper.Plus.DapperPlusExtensions.BulkInsert[T](IDbConnection connection, String mapperKey, T item, Func`2[] selectors)
em Z.Dapper.Plus.DapperPlusExtensions.BulkInsert[T](IDbConnection connection, T item, Func`2[] selectors)
em Project.Plugins.Utils.Extensions.CommandExtensions.InsertSource[T](IDbConnection connection, IEnumerable result) na D:ProjetosProject-API-Cloudproject-etlProject.Plugins.UtilsExtensionsCommandExtensions.cs:linha 52
em Autorizacoes.ERP.LIBSENHA.JobAutorizacoes.Execute(IJobExecutionContext context) na D:ProjetosProject-API-CloudProject-etlAutorizacoesJobAutorizacoes.cs:linha 105

免责声明:我是Dapper Plus项目的所有者

问题

Dapper Plus 库抛出以下错误:

无法解析提供程序。您必须明确设置 供应商。

原因

Dapper Plus无法从提供的连接中找到提供商。

例如,连接可能类似于 AzureConnection。

var sqlClient = new AzureConnect();
var target = sqlClient.GetConnection()
var fullName = target.GetType().FullName;

库当前不知道它必须以与 SqlConnection 相同的方式处理此连接。

解决方案 #1 - SqlDirect 连接

请改用直接使用 SqlConnection。

如果当前连接只是一个包装器,则有时可以在名为UnderlyingConnectionInnerConnection的属性下找到 SqlConnection。

解决方案#2 - 报告问题

我建议您在此处打开问题

并提供有关如何使用/下载什么的信息,以便我们可以使用与您相同的代码进行AzureConnect

我们通常会在几天内修复此类问题。

相关内容

最新更新