Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Entity Framework Core İle In-Memory’de Çalışmak

Merhaba,

Günlük hayatta yeni bir teknolojiyi, yapıyı, yöntemi vs. öğrenirken veya tatbik ederken yahut geliştireceğiniz herhangi bir ürünün promosyonunu oluştururken yapacağınız çalışmada veritabanına ihtiyacınız varsa ve ORM olarak Entity Framework Core’u kullanacaksanız, bunun için gerçek bir veritabanı oluşturmanın ve gerekli bağlantıları kurmanın ne kadar maliyetli olduğunu biliyorsunuz kanaatindeyim. İşte bu tarz durumlarda Entity Framework Core, operasyonel açıdan birebir aynı işlemleri gerçekleştirirken veritabanı işlemlerinin fiziksel yükünü arındırabilmek ve hızlıca çalışmalarımıza odaklanabilmek için In-Memory desteğini sunmaktadır. Şimdi gelin bu desteğin nasıl kullanıldığını inceleyelim.

Öncelikle Entity Framework Core ile In-Memory’de çalışmanın ne gibi avantajları ve dezavantajları olacaktır bunlardan bahsedelim;
Avantajları

  • Test ve promosyon uygulamalarda gerçek/fiziksel veritabanları oluşturmak ve yapılandırmak yerine tüm veritabanını bellekte modelleyebilir ve gerekli işlemleri sanki gerçek bir veritabanında çalışıyormuş gibi orada gerçekleştirebiliriz.
  • Bellekte çalışmak geçici bir deneyim olacağı için veritabanı serverlarında test amaçlı üretilmiş olan veritabanlarının lüzumsuz yer işgal etmesi engellenmiş olacaktır.
  • Bellekte veritabanını modellemek, kodun hızlı bir şekilde test edilmesini sağlacaktır.

Dezavantajları

  • In-Memory’de yapılacak olan veritabanı işlevlerinde ilişkisel modellemeler yapılamamaktadır. Bu durumdan dolayı veri tutarlılığı sekteye uğrayabilir ve istatiksel açıdan yanlış sonuçlar elde edilebilir.

In-Memory’de tasarlanmış bir veritabanı üzerinde yapılan hızlı testler neticesinde artık uygulamanın gerçek bir veritabanına geçmeye hazır olduğu anlaşıldığı an, gerekli yapılandırmalar kolayca sağlanabilecek ve direkt fiziksel bir veritabanına bağlanılabilecektir.

Kütüphane Kurulumu
Entity Framework Core ile in-memory’de çalışabilmek için ilgili projeye Microsoft.EntityFrameworkCore kütüphanesiyle birlikte Microsoft.EntityFrameworkCore.InMemory kütüphanesinin yüklenmesi gerekmektedir.

Örnek Çalışma
İlk olarak örnek amaçlı birkaç entity model oluşturalım.
Employee;

    class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public List<Customer> Customers { get; set; }
    }

Customer;

    class Customer
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public Employee Employee { get; set; }
    }

Ardından context nesnesini aşağıdaki gibi tasarlayalım.

    class ExampleContext : DbContext
    {
        public DbSet<Employee> Employees { get; set; }
        public DbSet<Customer> Customers { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseInMemoryDatabase("exampleDatabase");
        }
    }

Burada dikkat edilmesi gereken nokta 8. satırdaki ‘UseInMemoryDatabase’ fonksiyonudur. Bu fonksiyon sayesinde ilgili context’in in-memory’de depolama yapacağı bilgilendirilmektedir.

Böylece test amaçlı bellekte veritabanı sağlamış bulunmakta ve çalışmalarımızdaki ekstra yoğunluğu azaltmaktayız.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

5 Cevaplar

  1. Orxan dedi ki:

    Merabalar hocam.

    Bir sorunla karşılaşdım. Fakat tam olaraq bu sorunu belkide ne kimese anlata bildim nede tam olarak internet uzerinden bir bilgi edine bildim. Eger yardimci olursanız ve ya hangi formatda bir arama yapa bileceyimi soylerseniz cok memnun olurum.

    KARŞILAŞDIMI SORUN:

    CodeFirst ile olusturmus oldugum ManyToMany iliskili iki tablom var. (örneyin Company(ID,CompanyName); Group(ID, GroupName);). Bu tablolara ilişkiyi gerçekleştiren aralıq tablo (CompnyGroup(CompanyID, GroupID)) sql tarasında oluşturulmuşdur. MVC Core tarafinda kəndim oluşturduğum hər iki ana tabloya ulaşa ve ilgili işlemleri yapa biliyorum. Fakat aralıq tabloya ulaşa bilmiyorum. Ara taployu codeFirst tarafında kendim olduşdurmağa çalışdığımda da yine sıkıntı yaşıyorum.

    Anlıyacağınız Ara tabloya ulaşamıyor və CRUD gibi işlerin hiç birini sağlayamıyorum.

    • Gençay dedi ki:

      Merhaba,

      EF Core 5.0’da cross table’ın entitysini oluşturmak zorunda değiliz. Öncesinde ise biz kendimiz manuel oluşturuyorduk.

      Şuradaki içeriğe göz atın. ‘StudentCourse’ entity’si ara tabloya ulaşmanızı sağlamaktadır. Benzerini modellediğinizde ulaşabileceksiniz.

      Kolay gelsin.

  2. SY dedi ki:

    Siz yazılım sektörünün başına gelmiş en güzel şanslardan birisiniz. Neyi anlamıyorsam açıyorum sizin blogunuzu ya videonuzu hemen anlıyorum. Teşekkürler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir