Compile Error
«System.Data.SqlClient.SqlConnection» не имеет применимый метод под названием «Запрос», но, как представляется, метод расширения с таким именем. Методы расширения не могут динамически отправляться. Рассмотрите возможность использования динамических аргументов или вызова метода расширения без синтаксиса метода расширения.В чем причина «динамических рассылок» не существует?
Теперь я знаю, как решить эту проблему, но я пытаюсь лучше понять эту ошибку. У меня есть класс, который я создаю, чтобы использовать Dapper. В конце концов, я собираюсь предоставить еще несколько пользовательских функций, чтобы сделать наш тип доступа к данным намного более упорядоченным. В частности, строительство в трассировке и прочее. Однако, сейчас это так просто, как это:
public class Connection : IDisposable
{
private SqlConnection _connection;
public Connection()
{
var connectionString = Convert.ToString(ConfigurationManager.ConnectionStrings["ConnectionString"]);
_connection = new SqlConnection(connectionString);
_connection.Open();
}
public void Dispose()
{
_connection.Close();
_connection.Dispose();
}
public IEnumerable<dynamic> Query(string sql, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null)
{
// this one works fine, without compile error, so I understand how to
// workaround the error
return Dapper.SqlMapper.Query(_connection, sql, param, transaction, buffered, commandTimeout, commandType);
}
public IEnumerable<T> Query<T>(string sql, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null)
{
// this one is failing with the error
return (IEnumerable<T>)_connection.Query(sql, param, transaction, buffered, commandTimeout, commandType);
}
}
но достаточно интересно, если бы я просто выдавать такое заявление:
_connection.Query("SELECT * FROM SomeTable");
компилирует просто отлично.
Итак, может кто-нибудь, пожалуйста, помогите мне понять, почему использование такой же перегрузки внутри этих других методов не срабатывает с этой ошибкой?
@pst, справедливо, это не технически брошено. –
Зачем вам нужен динамический параметр, а не параметр param? Вы не выполняете никаких операций или вызовов метода. Ты? –