Dapper ORM을 사용하여 레코드가 존재하는지 확인하기

dapper sql-server

문제

나는 Dapper를 처음 사용하기 때문에 명백한 것이 빠져있을 수도 있지만 테이블에 레코드가 존재하더라도 왜이 쿼리가 null 반환하는지 이해할 수 없습니다.

queryResult = db.Query<dynamic>(@"SELECT Id FROM Customer WHERE CustomerId = @CustomerId", 
                new { CustomerId = theCustomerId }).FirstOrDefault();

레코드가 존재하는지 확인하기 위해이 레코드가 있는지 확인하고 있지만 queryResult는 항상 null 입니다. @CustomerId 매개 변수는 정확히 일치하는 string 입니다.

SQL Server에서 SQL을 실행하면 아무런 문제가 없습니다 ...

SELECT Id FROM Customer WHERE CustomerId = 'abc123'

여기서 abc123CustomerId

수락 된 답변

원하는대로 null을 반환합니다.

다음은 Query API의 일부로 실행되는 Query

"SELECT Id FROM Customer WHERE CustomerId = @CustomerId", 
                new { CustomerId = theCustomerId }

이제 무슨 일이 때 발생하는 CustomerId 일치하지 않는 경우, 비어 생산 IEnumerable<dynamic> 이유는 다른 이야기지만, dynamic , 사용된다 integer 가정 Id 정수

하지만 FirstOrDefault() 빈 찾는 수행 IEnumerable 반환 null 과 같은 확인합니까 그래서 그냥 분리, Any 기본적으로 말끔는 반환하지 않습니다, null 코드가 그것을 강요,


인기 답변

dapper를 사용하여 존재를 확인하는 가장 좋은 방법은 다음과 같습니다.

string sql = "SELECT count(1) FROM Customer WHERE CustomerId = @CustomerId;";

bool exists = false;

using (var connection = new SqlConnection("connection string"))
{
    connection.Open();
    exists = connection.ExecuteScalar<bool>(sql, new { CustomerId = "abc123" });
}

특정 예제가 null을 반환하는 이유에 관해서는 db.Query 와 같은 대괄호가 필요했기 때문에 의심 db.Query .

queryResult = (db.Query<dynamic>(@"SELECT Id FROM Customer WHERE CustomerId = @CustomerId", 
            new { CustomerId = theCustomerId })).FirstOrDefault();


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow