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…
