10. Hafta Ders Notları

ASP.Net MVC Core, C#, Ado.Net, Entity Framework, Windows Form, SQL Server, Console, HTML, CSS, JQuery, Web Api
Cevapla
Kullanıcı avatarı
AzS
1500+
1500+
Mesajlar: 8938
Kayıt: 02 Ağu 2019 08:10

10. Hafta Ders Notları

Mesaj gönderen AzS »

Entity Framework
Şimdiye kadar anlatılan konular üzerinden şu söylenebilir; “veri tabanı ile uygulama arasında bir bağ kurulabiliyor”. Bu Ado.net ile mümkün kılınmıştı. Veri tabanı ile uygulama arasında veri alışverişi yapılabiliyordu. Ancak belirtmek gerekir ki bu bağ (ya da yöntem) bazı zorlukları ve sıkıntıları beraberinde getiriyor. Bugün database ile uygulama arasındaki iletişimi daha iyi yönetecek bir sistemden bahsedilecektir.

Resim

Geleneksel yöntem olarak; Sql’I OOP’a map’leyecek (haritalayacak ya da planlayacak yazamadım ) sabit bir katman oluşturulur. Uygulamanın bir çok yerden veri tabanına ulaşması için en iyi çözüm budur. Ama hala bir takım sıkıntılar doğmaktadır;
- Uygulama ve database arasında sıkı bir bağ vardır. Bunun dezavantajı şudur; uygulamadaki ilgili class’ları değiştirilmeden veritabanındaki tablolar değiştirilemez.
- Stabil kalması zordur. Mesela sql sorguları uygulama içinde pek çok yere dağılmış classlar vb yapılara bağlı olabilir. Bu classlarda yapılan en ufak bir değişiklik sorguların hatalı sonuçlanmasına yada sonuçlanmamasına sebep olabilir.
- Uygulama alanları ile veritabanı alanları aynı olmayabilir.

Resim

Tam bu noktalarda karşılaşılan sıkıntıları gidermek ve daha iyi çözüm yolları oluşturmak için yeni bir kavram ortaya çıkmaktadır:
ORM (Object Relational Mapping) nedir?
ORM, ilişkisel veri tabanı (RDBMS) ile nesne yönelimli programlama (OOP) arasındaki ilişkiyi kuran ve ilişkisel veri tabanındaki bilgileri yönetmek için nesne modellerini kullanan bir tekniktir. Yani nesneleri database deki tablolara bağlayarak uygulama ile database arasındaki alışverişi sağlar. ORM kavramı belli bir programlama diline bağlı değildir ve her OOP dilinde yazılabilir.
ORM sayesinde veritabanında herhangi bir tablo yaratılması halinde oop kodu tarafında bir nesne oluşturmaya gerek kalmadan otomatik olarak code generation tekniği kullanarak developer tarafından yazılması gereken kodu (class’ı) oluşturur.
.NET için ORM frameworkleri:
- Entity Framework
- Nhibernate
- .Net Persistence
- DataObjects.NET
- DotNorm
- FastObjects.NET
- Norm
- OJB.NET
Bu araçlar arasında .Net’de en çok kullanılan iki araç “Entity Framework” ve “Nhibernate” araçlarıdır. Entity Framework ise kullanım ve yaygınlık açısından açık ara farkla ilk sıradadır. Eğitim boyunca ORM aracı olarak Entity Framework kullanılacaktır.
Entity Framework nedir?
Entity Framework, demin belirtildiği gibi .NET platformu için geliştirilmiş olan ORM frameworklerinden biridir. Entity framework'ün aslında temel amacı uygulama geliştiricinin data işlemleri ile çok haşır neşir olmadan uygulama tarafına odaklanmasını sağlamaktır. Çok basit bir örnek olarak, klasik ADO.NET uygulamalarında bir bağlantının açılmasından ve kapatılmasından tamamen biz geliştiriciler sorumludur. Ancak entity framework kullandığınızda bu tür işlemlere siz karışmazsınız. Sorgunuzu hazırlar ver entity framework aracılığı ile bunu database'e iletirsiniz.

Entity Framework’un yapısı ise şu şekildedir:
Resim

EDM (Entity Data Model): EDM 3 bölümden oluşur. Conceptual Model, Mapping, Storage Model.
Conceptual Model: Bu alanda model sınıflarımız ve bu sınıfların ilişkileri yer alacaktır. Bu sınıflar veritabanı tasarımınızdan bağımsız olacaktır.
Storage Model: Bu alanda veritabanı tasarım modelimiz yer alır. Bu model içerisinde veritabanımıza ait tablolar, view'lar, stored procedure'ler ve bunlara ait ilişkiler ve key'ler yer alır.
Mapping: Bu alan ise model sınıflarımız ile tasarım modelimiz arasındaki haritalama işlemlerinin bilgilerinin tutulduğu alandır.
LINQ to Entities: Nesneleri sorgulamada kullanacağımız sorgulama dilidir. Bu sorgular bize model sınıflarını döndürecektir. Bu alanda LINQ'in yeteneklerini de kullanabiliriz.
Entity SQL: Yine LINQ to Entities gibi sorgulama yapabileceğimiz bir sorgulama dilidir. Ancak Linq To Entities'e göre daha zordur.
Object Services: Veritabanından sorgulama sonucunda alınan verilerin geri döndürülme aşamasında gereken convert (dönüştürme) işlemlerinin yapıldığı alandır.
Entity Client Data Provider: Bu alanın sorumluluğu hazırlanan LINQ to Entities yada Entity SQL sorgularını ADO.Net Data Provider'a gönderilmek üzere anlaşılır SQL sorgularına dönüştürmektir.
ADO.Net Data Provider: Bu katman ise standart ADO.NET kullanarak veritabanı ile iletişim kurar.
Entity Framework (dolayısıyla ORM) avantajları:
- Object Oriented Programming(OOP) için uygun ortam hazırlıyor.
- SQL sorgusu yazmanıza gerek kalmadan veritabanına bağlanıp uygulama yazabiliyorsunuz.
- Veritabanı türü ile bağımlılığı bulunmuyor.
- ORM araçları genellikle Open Source(ücretsiz).
- Test edilmesi kolay kodlar oluşturur.
- Yazılım şirketleri tarafından destekleniyor.
- Geleceğin programcılık mantığını şekillendiriyor.
Entity Framework dezavantajları:
- Performans sorunu yaşanabilir.
- Hakimiyet derecesi azalabilir, sebebi ise bilgi alışverişinin artık EF tarafından yapılmasıdır.
NuGet nedir?
Açık kaynak kütüphaneler ile uygulama geliştirirken karşılaştığımız en önemli sorunlardan biri de kütüphanelerin elde edilmesi, güncellenmesi ve bağlı olduğu diğer kütüphanelerin elde edilmesi sırasında ortaya çıkan sorunlardır. Örneğin bir kütüphaneyi indirdikten sonra tam projeye referans edip kullanmaya başlanılacağı sırada indirilen kütüphanenin başka bir kütüphaneye bağlı olduğunu görebilmekte ve bu sefer gidip o kütüphaneyi indirmek gibi sıkıcı süreçlerle karşılaşılabilir.
Özellikle Microsoft cephesine bakıldığında bu şekilde bir süreci otomatize eden bir yapı bulunmamaktaydı. Ancak ASP.NET takımı tarafından geliştirilen NuGet doğrudan Visual Studio içerisine entegre olarak çalışmakta ve shell scriptleri ile ilgili kütüphanelerin ve diğer bağımlı kütüphanelerin indirilerek projeye referans edilmesini sağlamaktadır.

NuGet Kullanımı
Bir proje dosyasına Entity Framework aracı eklenmek istendiğinde aşağıdaki adımlar
Resim

Buradaki “Manage NuGet Packages” komutu tıklandığında aşağıdaki ekranlar gelir:
VS 2013
Resim
Bu versiyonda 2013’de direct new windows olarak çıkıyor.
Ancak VS 2015’de:
Resim
Ancak vs 2015 versiyonunda pencere olarak yazdırmadı.
Devam etmek gerekirse; entity framework NuGet de aranır ve o projeye yüklenir.
Resim
Yukarıdaki şekilde numaralandırılmış şekilde işlemleri sırasıyla uygulamak gerekir.

Resim

Burada görülüyor ki kurulum başarıyla yapıldı ve kullanıma hazır.
Bir diğer kurulum da Package Manager Console üzerinden yapmaktır. Bunun için package manager tool penceresi açık olmalıdır. Açmak için View > Other Window > Packed Manager Controller
Resim
Derste yapılan EF Örnekleri:
dbOkul Örneği:
dbOkul adında veritabanı oluşturulup içerisine Ogrenci adında bir tablo oluşturuyoruz.
Resim

Daha sonra visual studio üzerinden yeni bir form uygulaması açıyoruz. Açtığımız uygulamada form tasarımı yapmadan önce oluşturduğumuz veri tabanı modelini ekliyoruz.
Resim
Resim
Resim
Resim
Resim

Model ekleme sihirbazı her uygulama için aynı şekilde yapılacaktır. O nedenle uygulamar üzerinde tekrar tekrar gösterilmeyecektir. Daha sonra form tasarımına geçiyoruz.
Resim
Resim
Resim
Resim

Northwind dbFirst Categories Örneği:
Resim
Resim
Resim
Resim
Resim
Resim
Resim
Resim

Northwind dbFirst Products Örneği:
Resim
Resim
Resim
Resim
Resim
Resim
Resim

Northwind dbFirst Employees Örneği:
Resim
Resim
Resim
Resim
Resim
Resim
Resim
Kullanıcı avatarı
AzS
1500+
1500+
Mesajlar: 8938
Kayıt: 02 Ağu 2019 08:10

Re: 10. Hafta Ders Notları

Mesaj gönderen AzS »

Cevapla

“Yazılım Uzmanlığı Ders Notları” sayfasına dön