SQLite EF Core Veritabanı Sağlayıcısı Sınırlamaları
SQLite sağlayıcısının bir dizi geçiş sınırlaması vardır. Bu sınırlamaların çoğu, temel alınan SQLite veritabanı altyapısındaki sınırlamaların bir sonucu olup EF'ye özgü değildir.
Modelleme sınırlamaları
Ortak ilişkisel kitaplık (Entity Framework ilişkisel veritabanı sağlayıcıları tarafından paylaşılan), çoğu ilişkisel veritabanı altyapısı için ortak olan modelleme kavramları için API'leri tanımlar. Bu kavramlardan birkaçı SQLite sağlayıcısı tarafından desteklenmez.
- Şemalar
- Sıralar
Sorgu sınırlamaları
SQLite, aşağıdaki veri türlerini yerel olarak desteklemez. EF Core bu türlerin değerlerini okuyabilir ve yazabilir ve eşitlik (where e.Property == value
) sorgulaması da desteklenir. Ancak karşılaştırma ve sıralama gibi diğer işlemler istemcide değerlendirme gerektirir.
- DateTimeOffset
- Ondalık
- TimeSpan
- UInt64
DateTimeOffset
yerine DateTime değerlerini kullanmanızı öneririz. Birden çok saat dilimini işlerken, kaydetmeden önce değerleri UTC'ye dönüştürmenizi ve ardından uygun saat dilimine dönüştürmenizi öneririz.
türü Decimal
yüksek düzeyde duyarlık sağlar. Ancak bu hassasiyet düzeyine ihtiyacınız yoksa bunun yerine çift kullanmanızı öneririz. Sınıflarınızda ondalık kullanmaya devam etmek için değer dönüştürücüsü kullanabilirsiniz.
modelBuilder.Entity<MyEntity>()
.Property(e => e.DecimalProperty)
.HasConversion<double>();
Geçiş sınırlamaları
SQLite veritabanı altyapısı, diğer ilişkisel veritabanlarının çoğunluğu tarafından desteklenen bir dizi şema işlemini desteklemez. Desteklenmeyen işlemlerden birini SQLite veritabanına uygulamayı denerseniz bir NotSupportedException
oluşturulur.
Belirli işlemleri gerçekleştirmek için yeniden derleme denenecek. Yeniden derlemeler yalnızca EF Core modelinizin parçası olan veritabanı yapıtları için mümkündür. Bir veritabanı yapıtı modelin parçası değilse (örneğin, bir geçiş içinde el ile oluşturulduysa) yine de bir NotSupportedException
oluşturulur.
İşlem | Destekleniyor mu? |
---|---|
AddCheckConstraint | ✔ (yeniden oluşturma) |
AddColumn | ✔ |
AddForeignKey | ✔ (yeniden oluşturma) |
AddPrimaryKey | ✔ (yeniden oluşturma) |
AddUniqueConstraint | ✔ (yeniden oluşturma) |
AlterColumn | ✔ (yeniden oluşturma) |
CreateIndex | ✔ |
Createtable | ✔ |
DropCheckConstraint | ✔ (yeniden oluşturma) |
DropColumn | ✔ (yeniden oluşturma) |
DropForeignKey | ✔ (yeniden oluşturma) |
DropIndex | ✔ |
DropPrimaryKey | ✔ (yeniden oluşturma) |
DropTable | ✔ |
DropUniqueConstraint | ✔ (yeniden oluşturma) |
RenameColumn | ✔ |
RenameIndex | ✔ (yeniden oluşturma) |
RenameTable | ✔ |
EnsureSchema | ✔ (işlem yapılmaz) |
DropSchema | ✔ (işlem yapılmaz) |
Insert | ✔ |
Güncelleştir | ✔ |
Silme | ✔ |
Geçiş sınırlamaları geçici çözümü
Yeniden derleme gerçekleştirmek için geçişlerinizde el ile kod yazarak bu sınırlamaların bazılarına geçici çözüm getirebilirsiniz. Tablo yeniden derlemeleri, yeni tablo oluşturmayı, verileri yeni tabloya kopyalamayı, eski tabloyu bırakarak yeni tabloyu yeniden adlandırmayı içerir. Bu adımlardan Sql(string)
bazılarını gerçekleştirmek için yöntemini kullanmanız gerekir.
Daha fazla ayrıntı için SQLite belgelerinde Diğer Türlerde Tablo Şeması Değişiklikleri Yapma bölümüne bakın.
Tek etkili betik sınırlamaları
Diğer veritabanlarının aksine, SQLite yordam dili içermez. Bu nedenle, etkili geçiş betikleri için gerekli if-then mantığını oluşturmanın bir yolu yoktur.
Veritabanına uygulanan son geçişi biliyorsanız, bu geçişten en son geçişe bir betik oluşturabilirsiniz.
dotnet ef migrations script CurrentMigration
Aksi takdirde, geçişleri uygulamak için kullanmanızı dotnet ef database update
öneririz. komutunu çalıştırırken veritabanı dosyasını belirtebilirsiniz.
dotnet ef database update --connection "Data Source=My.db"
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin