Использование IDbParameter с Dapper и. NET Core 3.1 - PullRequest
0 голосов
/ 28 февраля 2020

Сначала в некотором контексте я получил эту ошибку (см. Ниже) при попытке запустить приложение. NET Core 3.1 в docker. Который отлично работает в IIS в VS 2019.

Error:
  An assembly specified in the application dependencies manifest (Example.CMS.API.deps.json) was not found:
    package: 'Microsoft.Data.SqlClient', version: '1.1.1'
    path: 'runtimes/unix/lib/netcoreapp2.1/Microsoft.Data.SqlClient.dll'

Я использую Dapper для доступа к БД, и у меня есть следующий класс (см. Ниже) для типов отображения.

 public class JsonObjectTypeHandler<T> : SqlMapper.TypeHandler<T> where T : class, new()
    {
        public override T Parse(object value)
        {
            // ...
        }

        public override void SetValue(IDbDataParameter parameter, T value)
        {
            // ...
        }
    }

К сожалению, IDbParameter живет в пространстве имен System.Data.SqlClient, насколько я понимаю, что пространство имен несовместимо с NET Core 3.1, как я выяснил, пытаясь протестировать / запустить в docker. Вместо этого я изменил свое приложение на ссылку System.Data.Common и изменил все ссылки на IDbConnection на DbConnection, которые работали нормально. Однако интерфейс SqlMapper.TypeHandler<T> использует IDbDataParameter, поэтому я не могу сослаться на IDbDataParameter в пространстве имен System.Data.Common.

Возможно, я что-то упустил, но я думаю, что мне нужно сбросить System.Data.SqlClient, но я не могу сделать это, пока Dapper использует интерфейс IDbDataParameter?

Любые предложения будут великолепны!

...