OrmLite'ta JSON özellikleri normal property gibi sorgulanabiliyor
ServiceStack v10.4 ile OrmLite'ta karmaşık tip özellikleri, x.Address.City veya x.Lines.Any(...) gibi tipli ifadelerle doğrudan sorgulanabiliyor. Sorgular SQLite, PostgreSQL, SQL Server ve MySQL'in kendi JSON fonksiyonlarına çevriliyor. Veritabanı başına ayrı JSON sözdizimi yazmadan taşınabilir kod elde edilebiliyor.
Kilit noktalar
- Karmaşık tip ve liste özellikleri Sql.Json() sarmalayıcısı olmadan x.Address.City gibi yollarla sorgulanıyor.
- Any(), All() ve Count(koşul) her liste öğesini tek seferde kontrol eder; x.Lines[0] ile iki farklı satırı karıştırma riski yoktur.
- Desteklenen veritabanları: SQLite, PostgreSQL, SQL Server ve MySQL/MariaDB; her biri kendi JSON fonksiyonunu kullanır.
- Bir dialect JSON saklamıyorsa UseJson ayarı gerekir; JSV kayıtları önce JSON'a çevrilmelidir.
- Sık sorgulanan alanlar için [Index] ile ayrı bir kolon oluşturmak veya SQLite/PostgreSQL'de ifade indeksi kullanmak performansı artırır.
OrmLite, v10.4 ile karmaşık tipteki ve liste tipindeki özellikleri JSON olarak saklamaya devam ederken bu alanlara LINQ benzeri tipli ifadelerle doğrudan erişmeyi mümkün kılıyor. Where, OrderBy, Select, Count, UpdateOnly ve Delete gibi çağrılarda x.Address.Country.Code, x.Tags.Contains("vip") veya x.Lines.Count > 1 yazılabiliyor. Liste öğeleri üzerinde Any, All ve Count koşulları da aynı öğe için birlikte değerlendiriliyor.
Bu özellik için alanın JSON olarak saklanması gerekiyor ve bu varsayılan olarak AddOrmLite() ile yapılandırılan dialect'lerde geçerli. Başka dialect'lerde UseJson ayarı açılmalı; mevcut satırlar JSV formatındaysa önce dönüştürülmeli. Sorgu yapılamayan durumda sessizce boş sonuç yerine NotSupportedException fırlatılıyor.
Gerçek dünyada kullanımı
- Müşteri adreslerini ve etiketlerini JSON olarak tutan çok kiracılı bir SaaS API'sinde şehir veya VIP etiketine göre filtreleme.
- Sipariş satırlarını JSON saklayan bir e-ticaret servisinde belirli bir SKU ve miktar koşulunu aynı satırda arama.
- Olay gövdelerini metin kolonunda tutan bir entegrasyon servisinde Sql.Json<T>() ile olay verisini tipli okuma.
Neden önemli
Veritabanına özgü JSON sözdizimi yazmadan tipli ve taşınabilir sorgular kurabilirsiniz; model değiştiğinde derleyici hataları yakalar. Büyük tablolarda performans için sık kullanılan JSON alanlarını indekslemeyi de düşünmelisiniz.