OP'nin hayal kırıklığını anlıyorum, bu sanal kullanım, defacto sanal değiştiricinin etkili olduğu tempolu soyutlama için değil.
Herhangi biri hala bununla uğraşıyorsa, çözümleri basit ve jargonu minimumda tutmaya çalışırken bakış açımı sunarım:
Entity Framework, basit bir parçada, gelecekteki yürütme için bir şey hazırlamanın karşılığı olan tembel yüklemeyi kullanır. Bu 'sanal' değiştiriciye uyuyor, ancak daha fazlası var.
Entity Framework'te, sanal bir gezinme özelliği kullanmak, onu SQL'deki boş bir Yabancı Anahtarın eşdeğeri olarak göstermenize olanak tanır. Bir sorgu gerçekleştirirken her anahtarlı tabloya hevesle katılmanız gerekmez, ancak bilgiye ihtiyacınız olduğunda - talep odaklı olur.
Ayrıca, çoğu navigasyon özelliğinin başlangıçta uygun olmadığı için nullable ifadesinden de bahsetmiştim. Bir müşteri / Siparişler senaryosunda, bir müşteri oluşturmak için bir siparişin işleme alınmasını beklemek zorunda değilsiniz. Bunu yapabilirsiniz, ancak bunu başarmak için çok aşamalı bir süreciniz varsa , müşteri verilerini daha sonra tamamlanması veya gelecekteki siparişlere dağıtım için devam ettirmeniz gerekebilir . Tüm nav mülkleri uygulanmışsa, kayıttaki her Yabancı Anahtarı ve ilişkisel alanı kurmanız gerekir. Bu gerçekten de verileri tekrar belleğe ayarlar, bu da kalıcılık rolünü yener.
Bu nedenle, çalışma zamanında gerçek yürütmede şifreli görünse de, kullanılacak en iyi kuralın şu olduğunu tespit ettim: veri çıkarıyorsanız (bir Görünüm Modeline veya Seri Modeline okuma) ve referanslardan önce değerlere ihtiyacınız varsa, sanal kullanın; Kapsamınız eksik veya arama yapılması gerekebilecek ve bir arama için tamamlanan her arama parametresini gerektirmeyen veriler topluyorsa, kod nullable değer özellikleri int? uzun?. Ayrıca, enjekte etme ihtiyacı olana kadar iş mantığınızı veri toplama işleminizden soyutlamak, bir nesneyi örneklemeye ve boş olarak başlatmaya benzer birçok performans avantajına sahiptir. Entity Framework, performansı düşürebilen çok fazla yansıma ve dinamik kullanır ve talebe göre ölçeklendirilebilen esnek bir modelin olması, performansı yönetmek için kritik öneme sahiptir.
Bana göre bu, proxy'ler, delegeler, işleyiciler ve benzeri gibi aşırı yüklenmiş teknoloji jargonunu kullanmaktan her zaman daha mantıklıydı. Üçüncü veya dördüncü programlama dilinize çarptığınızda, bunlar dağınık olabilir.