Compile Lỗi
'System.Data.SqlClient.SqlConnection' không có phương pháp áp dụng có tên là 'Query' nhưng dường như có một phương pháp khuyến nông theo tên đó. Không thể gửi động các phương thức mở rộng. Xem xét truyền các đối số động hoặc gọi phương thức mở rộng mà không có cú pháp phương pháp mở rộng.Điều gì gây ra "phương pháp mở rộng không thể được gửi động" ở đây?
Bây giờ, tôi biết cách giải quyết vấn đề, nhưng tôi đang cố gắng hiểu rõ hơn về chính lỗi đó. Tôi có lớp mà tôi đang xây dựng để tận dụng Dapper. Cuối cùng, tôi sẽ cung cấp một số chức năng tùy chỉnh hơn để làm cho loại truy cập dữ liệu của chúng tôi được sắp xếp hợp lý hơn rất nhiều. Đặc biệt xây dựng trong truy tìm và các công cụ. Tuy nhiên, ngay lúc này nó cũng đơn giản như thế này:
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);
}
}
nhưng điều thú vị đủ, nếu tôi được chỉ đơn giản là đưa ra một tuyên bố như thế này:
_connection.Query("SELECT * FROM SomeTable");
nó biên dịch tốt.
Vì vậy, ai đó có thể vui lòng giúp tôi hiểu tại sao tận dụng cùng một tình trạng quá tải bên trong của những phương pháp khác không thành công với lỗi đó?
@pst, đủ công bằng, nó không được ném kỹ thuật. –
Tại sao bạn cần tham số động, thay vì tham số đối tượng? Bạn không thực hiện bất kỳ thao tác hoặc phương thức nào trên đó. Bạn có phải? –