compilazione errore
'System.Data.SqlClient.SqlConnection' non ha un metodo applicabile chiamato 'Query', ma sembra avere un metodo di estensione con quel nome. I metodi di estensione non possono essere inviati dinamicamente. Valuta la possibilità di trasmettere gli argomenti dinamici o chiamare il metodo di estensione senza la sintassi del metodo di estensione.Che cosa causa "i metodi di estensione non possono essere inviati dinamicamente" qui?
Ora, so come aggirare il problema, ma sto cercando di ottenere una migliore comprensione dell'errore stesso. Ho classe che sto costruendo per sfruttare Dapper. Alla fine fornirò alcune funzionalità personalizzate per rendere il nostro tipo di accesso ai dati molto più snello. In particolare la costruzione di tracce e cose. Tuttavia, in questo momento è semplice come questo:
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);
}
}
ma abbastanza interessante, se dovessi rilasciare semplicemente una dichiarazione come questa:
_connection.Query("SELECT * FROM SomeTable");
si compila bene.
Quindi, qualcuno può aiutarmi a capire perché sfruttare lo stesso sovraccarico di questi altri metodi sta fallendo con quell'errore?
@ pst, abbastanza giusto, non è tecnicamente gettato. –
Perché è necessario il parametro dinamico, anziché il parametro oggetto? Non stai facendo alcuna operazione o chiamata di metodo su di esso. Tu sei? –