- Kurumsal bir projeye başlarken Blank Solution (Boş Çözüm) şeklinde projemizi oluşturuyoruz. . Bir çözüm, birbirleri ile ilişkili projeleri (DataAccess,Business gibi.) düzenlemek için kullanılan bir kapsayıcıdır.
Blank Solution (Boş Çözüm) : Adına rağmen çözüm bir "yanıt" değildir. Bir çözüm, yalnızca bir veya daha fazla ilgili projeyi düzenlemek için Visual Studio tarafından kullanılan bir kapsayıcıdır. Visual Studio 'da bir çözüm açtığınızda, çözüm içerdiği tüm projeleri otomatik olarak yükler.
- Oluşturduğumuz boş çözüme katmanlar(projeler) ekliyoruz. Proje oluştururken "Class Library(.NET Standard)" standardını seçerek Entities, DataAccess ve Business olarak isimlendirdiğimiz katmanları oluşturuyoruz. Projeyi test etme amacıyla ConsoleUI olarak isimlendirdiğimiz "Console App(.Net Core)" oluşturuyoruz.
DataAccess (Veri Erişim Katmanı) : Sadece veriye erişmek için gerekli kodlar yazılır. Veriye erişmek için farklı teknikler vardır. İhtiyaca bağlı farklı teknikler kullanmak durumunda kalabiliriz. Uygulamada yapacağımız teknik değişikliklerden diğer projelerin etkilenmesi ve istenilen kod bloğuna erişim kolaylığı sağlamak amacı ile katmanlar kullanıyoruz.
ConsoleUI (API) : Business, DataAccess ve Enities katmanlarını API katmanı ile dış dünyaya aktarırız.
🌀 DataAccess 👉 Entities ile
🌀 Business 👉 DataAccess ve Entities ile
🌀 ConsoleUI 👉 DataAccess, Entities ve Business ile ilişkilidir.
ConsoleUI hariç tüm katmanlara Abstract ve Concrete klasörleri ekliyoruz.
Abstract : Soyut nesneleri ekleyeceğiz onlar bizim referans tutucularımız olacak. Yani interface'leri, abstract nesneleri ve base classları bu klasörün içine ekleyeceğiz.
Concrete : Somut nesneleri yani gerçek işi yapan class'ları bu klasörün içine ekleyeceğiz. Bu sınıflar bir veritabanı tablosuna karşılık gelir.
❗ Oluşturduğumuz class'ları "public" yapmalıyız ki diğer katmanlar da bu class'lara erişim hakkı kazansınlar. Çünkü DataAccess ürünü ekleyecek ise Business ürünü kontrol edecektir. ConsoleUI de ürünü gösterecektir.
Create table Brands(
BrandId int Primary key,
BrandName varchar(50)
)
Create table Colors(
ColorId int Primary key,
ColorName varchar(20)
)
Create table Cars(
Id int Primary key identity,
BrandId int,
ColorId int,
ModelYear int,
DailyPrice decimal,
Descriptions varchar(200),
Foreign key(ColorId) References Colors(ColorId),
Foreign key(BrandId) References Brands(BrandId)
)
Insert into Brands(BrandId,BrandName) values (1,'Audi'),(2,'BMW'),(3,'Hyundai'),(4,'Mitsubishi'),(5,'Nissan'),(6,'Mazda'),(7,'Porsche');
Insert into Colors(ColorId,ColorName) values (1,'Black'),(2,'White'),(3,'Silver'),(4,'Blue'),(5,'Red'),(6,'Brown'),(7,'Green');
Insert into Cars(BrandId,ColorId,ModelYear,DailyPrice,Description) values
(1,5,'2020',450,'AUDI Q8 - Red'),
(2,2,'2018',370,'BMW 2 Gran Coupé - White'),
(3,4,'2015',250,'HYUNDAI i10 - Blue'),
(4,7,'2016',290,'Mitsubishi Outlander - Green'),
(5,6,'2017',350,'NISSAN QASHQAI - Brown'),
(6,3,'2019',630,'MAZDA CX-5 - Silver'),
(7,1,'2021',720,'PORSCHE P911 Turbo S - Black');
Entity Framework Microsoft tarafından geliştirilmiş ORM (Object Relational Mapping) araçlarından biridir. ORM ise İlişkisel veritabanı ile nesneye yönelik programlama(OOP) arasında bir köprü görevi gören araçtır.Entity Framework, ADO.NET için açık kaynaklı bir nesne ilişkisel eşleme (ORM) çerçevesidir.İçerisinde UnitOfWork design pattern’nini barındırmaktadır. UnitOfWork ise yapılan her değişkliğin anlık olarak veritabanına yansıması yerine, bu işlemlerin toplu halde tek bir kanal üzerinden gerçekleşmesini sağlar.
👍 Avantajları
OOP olarak kod geliştirmemize olanak tanır.
Hiçbir SQL bilgisi olmayan bir kimse veritabanı işlemlerini EF ile gerçekleştirebilir.
Herhangi bir veritabanına bağımlılık yoktur. Oracle, MS SQL ile kullanılabilir.
Code First sayesinde projenizi veritabanınızı taşıma gereği duymadan istediğiniz yerde oluşturabilirsiniz. Buda projelerinize büyük bir esneklik sağlamaktadir.
Yazılım geliştirme zamanını ve maaliyetini azaltır.
👎 Dezavantajları
En büyük sorunumuz performans. Ado.Net gibi hızlı bir performansı yoktur. Tabi bu yavaş olduğu anlamına gelmez.
Veritabanından veri alış-verişi yapılacağı zaman kontrol bizde değil Entity Frameworktedir. Yani arka planda veritabanı işlemleri için kendisi sorgular oluşturmaktadır. Basit bir veri işlemi için karmaşık bir sorgu gönderebilmektedir. Bu Sorguları SQL Server Profiler ile görüntüleyebilmektesiniz.
EntityFramework ORM aracı bir NuGet paketidir. NuGet, .Net platformu ile yazılım geliştirirken kullanılan harici paketlerin yönetimini sağlar.Visual Studio ortamında projeye sağ tık yapıp Manage NuGet Packages seçeneği ile Microsoft.EntityFrameworkCore.SqlServer'ı seçip gerekli version ayarlarını yaparak kurulumunu gerçekleştirebiliriz.
Bu DataAccess içinde EntityFramework kullanabiliriz demektir.