dapper가있는 sqlite 및 sqlserver

dapper sql-server system.data.sqlite unit-testing

문제

나는 SQL Server와 함께 dapper를 사용하고 있지만, Sqlite를 사용하여 유닛 테스트를위한 메모리 테스트 중 일부를 사용합니다.

다음과 같은 수업이 있습니다.

public class Test
{
  public int ID {get;set;}
  public string Name 
}

SQL Server 연결을 사용하여 dapper를 사용하여 쿼리하면 정상적으로 작동합니다.

SQLite 연결을 사용하여 dapper를 사용하여 쿼리하면 형식 캐스팅 오류가 발생합니다. 기본적으로 ID 유형을 int가 아닌 long으로 변경해야합니다.

SQL Server에서 스키마를 변경하고 싶지 않으므로 시나리오에 대한 해결 방법이 있는지 궁금합니다. long / int에 대한 암시 적 캐스트를 사용하여 ID 클래스를 만들려고했지만이 작업도 실패하고 아이디어가 없습니다!

인기 답변

이는 Dapper가 IDataRecord 인터페이스에서 GetValue 메서드를 사용한다는 사실을 기반으로합니다. System.Data.SqlLite 네임 스페이스의 구체적인 클래스는 System.Data.SqlClient와 다른 값을 매핑합니다.

@FelicePollano가 지적한대로 SQLLite 테이블의 구조를 변경하고 System.Data.SqlLite의 구체적인 클래스가이를 다르게 매핑하는지 확인합니다.

또 다른 옵션은 FastExpando 객체 Dapper를 사용하여 자신의 매핑을 굴림으로써 값을 Int로 변환하도록합니다.

IEnumerable<dynamic> results = Conn.Query("Select ID from SomeTable");

var testValue = new Test
{
    ID = Convert.ToInt32(Results[0].ID.ToString())
};

많은 코드 변경이 필요할 수 있기 때문에 큰 팬이 아니지만 작동 할 수 있습니다.

참고 :이 예제 코드는 ID 열이 정수가 아닌 경우 예외를 throw 할 수 있습니다. TryParse를 사용할 수는 있지만 간단히하기 위해 포함하지 않았습니다.



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