Dapper Bulk 时出错。“您必须明确设置提供者”

Ped*_*nco 5 c# firebird dapper-plus

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

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

当我查阅源代码以在目标中进行插入时,一切都发生得很好。

\n\n

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

\n\n
\n

无法解析提供者。您必须显式设置\n 提供程序。

\n
\n\n

\xe2\x80\x8b\xe2\x80\x8b 的一些想法是什么导致了错误?

\n\n

编辑:

\n\n

全栈:

\n\n
   em ..(BulkOperation )\n   em ..(BulkOperation )\n   em Z.BulkOperations.BulkOperation.BulkInsert()\n   em Z.Dapper.Plus.DapperPlusAction.Execute()\n   em Z.Dapper.Plus.DapperPlusAction..ctor(BaseDapperPlusActionSet action, String key, DapperPlusActionKind kind, Object dataSource)\n   em Z.Dapper.Plus.DapperPlusActionSet`1.AddAction(String mapperKey, DapperPlusActionKind actionKind, TEntity item)\n   em Z.Dapper.Plus.DapperPlusActionSet`1.DapperPlusActionSetBuilder(IDbConnection connection, IDbTransaction transaction, String mapperKey, DapperPlusActionKind actionKind, TEntity item, Func`2[] selectors)\n   em Z.Dapper.Plus.DapperPlusExtensions.BulkInsert[T](IDbConnection connection, String mapperKey, T item, Func`2[] selectors)\n   em Z.Dapper.Plus.DapperPlusExtensions.BulkInsert[T](IDbConnection connection, T item, Func`2[] selectors)\n   em Project.Plugins.Utils.Extensions.CommandExtensions.InsertSource[T](IDbConnection connection, IEnumerable result) na D:\\Projetos\\Project-API-Cloud\\project-etl\\Project.Plugins.Utils\\Extensions\\CommandExtensions.cs:linha 52\n   em Autorizacoes.ERP.LIBSENHA.JobAutorizacoes.Execute(IJobExecutionContext context) na D:\\Projetos\\Project-API-Cloud\\Project-etl\\Autorizacoes\\JobAutorizacoes.cs:linha 105\n
Run Code Online (Sandbox Code Playgroud)\n

Jon*_*nan 3

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

问题

Dapper Plus 库抛出以下错误:

无法解析提供者。您必须明确设置提供者。

原因

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

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

var sqlClient = new AzureConnect();
var target = sqlClient.GetConnection()
var fullName = target.GetType().FullName;
Run Code Online (Sandbox Code Playgroud)

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

解决方案 #1 - SqlConnection Direct

直接使用 SqlConnection 代替。

UnderlyingConnection如果当前连接只是一个包装器,您有时可能会在名为或 的属性下找到 SqlConnection InnerConnection

解决方案 #2 - 报告问题

我建议您在这里打开一个问题

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

我们通常会在几天内解决此类问题。