System.Data.SQLite karşılaştırması

2005 yılında Robert Simpson, ADO.NET 2.0 için bir SQLite sağlayıcısı olan System.Data.SQLite'i oluşturdu. 2010 yılında projenin bakım ve geliştirmesini SQLite ekibi üstlemiştir. Mono ekibinin kodu 2007'de Mono.Data.Sqlite olarak çatalladığını da belirtmek gerekir. System.Data.SQLite uzun bir geçmişe sahiptir ve Visual Studio araçlarıyla birlikte kararlı ve tam özellikli bir ADO.NET sağlayıcısına dönüşmüştür. Yeni sürümler, .NET Framework'ün her sürümüyle uyumlu derlemeleri sürüm 2.0'a ve hatta .NET Compact Framework 3.5'e göndermeye devam eder.

.NET Core'un ilk sürümü (2016'da yayımlandı), .NET'in tek, basit, modern ve platformlar arası bir uygulamasıydı. Daha modern alternatiflere sahip eski API'ler ve API'ler kasıtlı olarak kaldırıldı. ADO.NET DataSet API'lerinden hiçbirini (DataTable ve DataAdapter dahil) içermez.

Entity Framework ekibi System.Data.SQLite kod temeli hakkında biraz bilgi sahibiydi. EF ekibinin eski bir üyesi olan Brice Lambson, daha önce SQLite ekibinin Entity Framework 5 ve 6 sürümleri için destek eklemesine yardımcı olmuştu. Brice, .NET Core'un planlandığı zamanda kendi SQLite ADO.NET sağlayıcısı uygulamasıyla da denemeler yapıyordu. Uzun bir tartışmanın ardından Entity Framework ekibi, Brice'in prototipini temel alarak Microsoft.Data.Sqlite oluşturmaya karar verdi. Bu, .NET Core hedefleriyle uyumlu yeni bir basit ve modern uygulama oluşturmalarını sağlar.

Daha modern ne anlamına geldiğine bir örnek olarak, hem System.Data.SQLite hem de Microsoft.Data.Sqlite içinde kullanıcı tanımlı işlev oluşturmak için kod aşağıda verilmiştir.

// 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'de .NET Core 2.0 stratejide bir değişiklik yaşadı. .NET Framework ile uyumluluğun .NET Core'un başarısı için hayati önem taşıdığına karar verildi. DataSet API'leri de dahil olmak üzere kaldırılan API'lerin çoğu geri eklendi. Diğer birçok kişide olduğu gibi, bu kısıtlanmamış System.Data.SQLite'nin de .NET Core'a taşınmasına olanak sağladı. Ancak Microsoft.Data.Sqlite'ın özgün hedefi hafif ve modern olmaya devam etmektedir. Microsoft.Data.Sqlite tarafından uygulanmayan ADO.NET API'leri hakkındaki ayrıntılar için bkz. ADO.NET sınırlamaları.

Microsoft.Data.Sqlite'a yeni özellikler eklendiğinde System.Data.SQLite'in tasarımı dikkate alınır. Mümkün olduğunda ikisi arasındaki değişiklikleri en aza indirerek aralarındaki geçişi kolaylaştırmaya çalışırız.

Veri türleri

Microsoft.Data.Sqlite ile System.Data.SQLite arasındaki en büyük fark, veri türlerinin nasıl işleneceğidir. Veri türleri'nde açıklandığı gibi, Microsoft.Data.Sqlite, sütun türü olarak herhangi bir keyfi dizenin belirtilmesine olanak tanıyan ve sadece dört temel türe sahip olan SQLite'in kendine özgü yapısını gizlemeye çalışmaz: INTEGER, REAL, TEXT ve BLOB.

System.Data.SQLite, bunları doğrudan .NET türlerine eşleyerek sütun türlerine ek semantikler uygular. Bu, sağlayıcıya daha güçlü bir tür hissi verir, ancak bazı eksiklikleri vardır. Örneğin, SELECT deyimlerindeki ifadelerin sütun türlerini belirtmek için yeni bir SQL deyimi (TYPES) tanıtmaları gerekiyordu.

Bağlantı dizeleri

Microsoft.Data.Sqlite anahtar sözcükleri çok daha az bağlantı dizesine sahiptir. Aşağıdaki tabloda bunun yerine kullanılabilecek alternatifler gösterilmektedir.

Anahtar sözcük Alternatif
Önbellek Boyutu Gönder PRAGMA cache_size = <pages>
EksikseBaşarısızOl Mode=ReadWrite kullanma
FullUri Veri Kaynağı anahtar sözcüğünü kullanma
Günlük Modu Gönder PRAGMA journal_mode = <mode>
Eski Biçim Gönder PRAGMA legacy_file_format = 1
En Fazla Sayfa Sayısı Gönder PRAGMA max_page_count = <pages>
Sayfa Boyutu Gönder PRAGMA page_size = <bytes>
Yalnızca Okuma Mode=ReadOnly kullanma
Eşzamanlı Gönder PRAGMA synchronous = <mode>
Uri Veri Kaynağı anahtar sözcüğünü kullanma
UTF16 Kodlamasını Kullan Gönder PRAGMA encoding = 'UTF-16'

İzin

Microsoft.Data.Sqlite,SQLite'in yetkilendirme geri çağırmasını ortaya çıkaran herhangi bir API'ye sahip değildir. Bu özellik hakkında geri bildirim sağlamak için sorun #13835 kullanın.

Veri değişikliği bildirimleri

Microsoft.Data.Sqlite'da SQLite'in veri değişikliği bildirimlerini ortaya çıkaran bir API yoktur. Bu özellik hakkında geri bildirim sağlamak için konu #13827 kullanın.

Sanal tablo modülleri

Microsoft.Data.Sqlite'ın sanal tablo modülleri oluşturmak için herhangi bir API'si yoktur. Bu özellik hakkında geri bildirim sağlamak için #13823 numaralı sorunu kullanın.

Ayrıca bkz.