Dapper가 DB 연결을 처리하는 방법과 DB 연결이 제대로 처리되지 않는 이유를 이해하는 데 도움이 필요합니다. 가능한 여러 가지 경우를 코딩했습니다. 내 코드에서는 _connection이 null인지 확인하고 이에 따라 새 연결을 만드는 중입니다. 요청을 진행할 때, 나는 때때로 연결이 열려 있다는 것을 알게되고, 연결 문자열이 객체에 없다는 것을 발견하면 (사용할 수 없게 만들지 만 NULL로 설정하지 않는다는 것을 발견한다). 나는이 사건들을 적절히 다루고 있지만, 비록 클라이언트의 코드가 명시 적으로 을 구현하여 문을 사용하여 코드를 감싸고 있음에도 불구하고 왜 이러한 연결이 이러한 다양한 상태를 가지는지 이해하고 싶습니다. ADO.net에서 연결을 처리하고 있습니까? Dapper의 부작용이 있거나 코드에 문제가 있습니까?Dapper가 사용하는 DB 연결의 비정상적인 동작을 이해하려고 시도합니다.
연결 관리 코드
public class DatabaseContext : IDatabaseContext
{
private readonly string _connectionString;
private DbConnection _connection;
public DatabaseContext(string connectionString)
{
_connectionString = connectionString;
}
public IDbConnection Connection
{
get
{
if (_connection == null)
_connection = new SqlConnection(_connectionString);
if (string.IsNullOrEmpty(_connection.ConnectionString))
_connection.ConnectionString = _connectionString;
if (_connection.State != ConnectionState.Open)
_connection.Open();
return _connection;
}
}
}
클라이언트 코드
public IEnumerable<PostSearResults> Search(SearchPostsBy searchPostsBy)
{
DynamicParameters param;
var sql = GetSearchSql(searchPostsBy,out param);//Gets SQL
using (var connection = _databaseContext.Connection)
{
var posts = connection.Query<PostSearResults>(sql, param);
return posts.ToList();
}
}
왜 코드를 작성하는지 알 수 없습니까?! 왜 그걸 썼지? Btw 코드 리뷰가 주제가 아닙니다. codereview.stackexchange.com에 질문을 게시해야합니다. – MikeSW
@MikeSW 클라이언트 코드가 명령문을 사용하여 DBConnection을 래핑하는 경우에도 DBConnection이 제대로 처리되지 않는 이유를 알고 싶습니다. 뭔가가 그걸 붙잡고있다. ADO.net에서 연결을 처리하고 있습니까? Dapper의 부작용이 있거나 코드에 문제가 있습니까? 이러한 세 가지 가능성으로, 단지 검토 문제 일 수 있습니까? 이슈보다 나에게 논평하는 이유는 무엇입니까? – Yogiraj
코드가하는 일에 대한 설명을 쓰는 대신이 질문을해야합니다. 연결을 다시 사용하려면 연결을 닫지 말고 닫아야합니다. Disposing은 SqlConnection을 다시 설정하고 '이미 삭제 된 개체'또는 비슷한 것을 던질 것입니다 – MikeSW