Veri

Marten ile Tür Hiyerarşilerini Saklama ve Sorgulama

Jeremy D. Miller, Marten'ın sınıf hiyerarşilerini tek bir PostgreSQL tablosunda nasıl sakladığını ve LINQ ile nasıl sorguladığını anlatıyor. EF Core'daki TPH, TPT ve TPC seçeneklerine kıyasla bu yaklaşım şema kararını ortadan kaldırıyor. Kısmi indeksler ve alt tipe özgü alanlar da ele alınıyor.

Yayın tarihi
Okuma süresi
10 dk okuma
agent çalıştırması #6
agent çalıştırması #6
Orijinale git jeremydmiller.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Alt tipleri AddSubClassHierarchy() ile kaydedin; büyük assembly'lerde açık tip listesi daha güvenlidir.
  • Tüm hiyerarşi tek tabloda tutulur; mt_doc_type ayırt edici sütunu üzerinde otomatik bir btree indeksi oluşur.
  • Taban tip sorguları somut alt tipleri döndürür; LoadAsync<CryptoPayment>(id) başka bir alt tipin belgesi için null döner.
  • Discriminator değeri sınıf adından türetilir; yeniden adlandırılan alt tipler için MappedType ile takma ad sabitleyin.
  • Duplicate<TSub>() alt tip alanını gerçek bir sütuna çevirir; indeksteki Predicate ise tek bir alt tipe özgü kısmi indeks oluşturur.
  • Yalnızca alt tipe ait özellikler için migration gerekmez; yeni özellikler JSON içinde otomatik görünür.

Jeremy D. Miller, EF Core tarafındaki geliştiricelerin sorduğu bir soruyu ele alarak Marten'ın sınıf hiyerarşilerini nasıl sakladığını ve sorguladığını anlatıyor. EF Core'da kalıtım eşlemesi için TPH, TPT ve TPC arasında baştan seçim yapmak gerekirken Marten, JSONB olarak saklanan belgeler sayesinde bu kararı ortadan kaldırıyor.

Konfigürasyon tek bir tabloyu kullanır ve her satır, gerçek tipini belirten mt_doc_type ayırt edici sütunu ile birlikte yalnızca kendi JSON verisini taşır. Taban tipe yapılan sorgular tüm aileyi somut tipleriyle geri getirir; alt tip sorguları ise otomatik olarak ayırt edici koşulu ekler. Yazar ayrıca alt tipe özgü kısmi indeksler ve Duplicate<TSub>() ile kopyalanan alanları anlatıyor. Ayrıntılar için orijinal yazıya göz atın.

Gerçek dünyada kullanımı

  • Kart, banka transferi ve kripto ödemelerinin tek API ve tek PostgreSQL tablosu üzerinden yönetildiği bir ödeme servisi.
  • Tüm ödemeleri tutar ve tarihe göre filtreleyen, ardından yalnızca bir alt tipe kısmi indeksle inen bir raporlama ekranı.
  • Marten projeksiyonları kullanan ve EF Core eşleme kararları olmadan belge tabanlı kalıtım modeli isteyen bir ekip.

Neden önemli

Marten'da hiyerarşi kararı tek bir tabloya indiği için şema bakımı ve sorgu ayarı çok daha az ceremoni gerektirir. Yine de tek sıcak tablonun autovacuum ve bloat maliyetlerini tüm alt tiplerle paylaştığını göz önünde bulundurun.

Bu özet, Jeremy D. Miller (The Shade Tree Developer) üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü