다음을 통해 공유


System.Data.SQLite와 비교

2005년 로버트 심슨은 ADO.NET 2.0용 SQLite 공급자인 System.Data.SQLite를 만들었습니다. 2010년 SQLite 팀은 프로젝트의 유지 관리 및 개발을 인수했습니다. Mono 팀이 2007년에 Mono.Data.Sqlite로 코드를 포크한 것도 주목할 가치가 있습니다. System.Data.SQLite는 오랜 역사를 가지고 있으며 Visual Studio 도구를 갖춘 안정적이고 완전한 기능을 갖춘 ADO.NET 공급자로 발전했습니다. 새 릴리스는 모든 버전의 .NET Framework와 호환되는 어셈블리를, .NET Framework 2.0 뿐만 아니라 .NET Compact Framework 3.5과도 호환되도록 계속 출시하고 있습니다.

.NET Core의 첫 번째 버전(2016년에 출시됨)은 .NET의 단일 경량, 최신 및 플랫폼 간 구현이었습니다. 최신 대안이 있는 구식 API 및 API는 의도적으로 제거되었습니다. ADO.NET DataSet API(DataTable 및 DataAdapter 포함)를 포함하지 않았습니다.

Entity Framework 팀은 System.Data.SQLite 코드베이스에 다소 익숙했습니다. EF 팀의 전 멤버였던 Brice Lambson은 이전에 SQLite 팀이 Entity Framework 버전 5 및 6에 대한 지원을 추가하는 데 도움을 주었습니다. Brice는 또한 .NET Core가 계획되는 동시에 SQLite ADO.NET 공급자의 자체 구현을 실험하고 있었습니다. 긴 논의 끝에 Entity Framework 팀은 Brice의 프로토타입을 기반으로 Microsoft.Data.Sqlite를 만들기로 결정했습니다. 이렇게 하면 .NET Core의 목표에 부합하는 새로운 경량 및 최신 구현을 만들 수 있습니다.

최신의 의미를 예로 들어 System.Data.SQLite와 Microsoft.Data.Sqlite 모두에서 사용자 정의 함수 만드는 코드는 다음과 같습니다.

// System.Data.SQLite
connection.BindFunction(
    new SQLiteFunctionAttribute("ceiling", 1, FunctionType.Scalar),
    (Func<object[], object>)((object[] args) => Math.Ceiling((double)((object[])args[1])[0])),
    null);

// Microsoft.Data.Sqlite
connection.CreateFunction(
    "ceiling",
    (double arg) => Math.Ceiling(arg));

2017년 .NET Core 2.0은 전략의 변화를 경험했습니다. .NET Framework와의 호환성이 .NET Core의 성공에 매우 중요하다고 결정했습니다. DataSet API를 포함하여 제거된 많은 API가 다시 추가되었습니다. 다른 많은 사용자와 마찬가지로 이 차단 해제된 System.Data.SQLite를 사용하면 .NET Core로도 이식할 수 있습니다. 그러나 Microsoft.Data.Sqlite가 가볍고 최신이 되려는 원래 목표는 여전히 남아 있습니다. Microsoft.Data.Sqlite에서 구현하지 않는 ADO.NET API에 대한 자세한 내용은 ADO.NET 제한 사항을 참조하세요.

Microsoft.Data.Sqlite에 새 기능이 추가되면 System.Data.SQLite의 디자인이 고려됩니다. 가능한 경우 둘 사이의 변경을 최소화하여 둘 사이의 전환을 용이하게 하려고 노력합니다.

데이터 형식

Microsoft.Data.Sqlite와 System.Data.SQLite의 가장 큰 차이점은 데이터 형식을 처리하는 방법입니다. 데이터 형식에 설명된 대로 Microsoft.Data.Sqlite는 임의의 문자열을 열 형식으로 지정할 수 있고 INTEGER, REAL, TEXT 및 BLOB의 네 가지 기본 형식만 포함하는 SQLite의 기본 단점을 숨기려고 하지 않습니다.

열 유형을 .NET 형식에 직접 매핑하도록 System.Data.SQLite는 추가 의미 체계를 적용합니다. 이렇게 하면 공급자에게 더 강력한 형식의 느낌을 주지만 몇 가지 미흡한 부분이 있습니다. 예를 들어 SELECT 문에서 식의 열 형식을 지정하기 위해 새 SQL 문(TYPES)을 도입해야 했습니다.

연결 문자열

Microsoft.Data.Sqlite에는 연결 문자열 키워드가 훨씬 적습니다. 다음 표에서는 대신 사용할 수 있는 대안을 보여 줍니다.

키워드 얼터너티브
캐시 크기 "PRAGMA cache_size = <pages>" 보내기
누락 시 실패 Mode=ReadWrite 사용
FullUri 데이터 원본 키워드 사용
업무 일지 모드 "PRAGMA journal_mode = <mode>" 보내기
레거시 형식 "PRAGMA legacy_file_format = 1" 보내기
최대 페이지 수 "PRAGMA max_page_count = <pages>" 보내기
페이지 크기 "PRAGMA page_size = <bytes>" 보내기
읽기 전용 Mode=ReadOnly 사용
동기화 "PRAGMA synchronous = <mode>" 보내기
Uri 데이터 원본 키워드 사용
UTF16인코딩사용 "PRAGMA encoding = 'UTF-16'" 보내기

권한 부여

Microsoft.Data.Sqlite에는 SQLite의 권한 부여 콜백을 노출하는 API가 없습니다. 문제 #13835 사용하여 이 기능에 대한 피드백을 제공합니다.

데이터 변경 알림

Microsoft.Data.Sqlite에는 SQLite의 데이터 변경 알림을 노출하는 API가 없습니다. 문제 #13827 사용하여 이 기능에 대한 피드백을 제공합니다.

가상 테이블 모듈

Microsoft.Data.Sqlite에는 가상 테이블 모듈을 만들기 위한 API가 없습니다. 문제 #13823 사용하여 이 기능에 대한 피드백을 제공합니다.

참조