1. Haberler
  2. Programlama
  3. Real Estate – AspNet Core 8.0 Eğitimine Başladım – Bölüm 1-8

Real Estate – AspNet Core 8.0 Eğitimine Başladım – Bölüm 1-8

Real Estate - AspNet Core 8.0 + Api + Dapper Murat Yücedağ kursunu izliyorum ve kodlama yapıyorum. Ayrıca neyin neden yapıldığını anlatmaya çalışıyorum. Sizde benim ile birlikte takip edebilirsiniz. Ayrıca M1 Pro işlemcili bir Macbook Pro'da bunu yapıyoruz. Dolayısıyla artık Apple Silicon işlemcisine sahip arkadaşlar da .NET ve SQL tarafında çalışabilecekler.

real estate projesi aspnet core 8.0 murat yücedağ
real estate projesi aspnet core 8.0 murat yücedağ
Paylaş

Bu Yazıyı Paylaş

veya linki kopyala

Merhaba,

Bu yazı aslında bir yazı dizisi olacak. Çünkü Murat Yücedağ’ın eğitim serisine başladım. YouTube üzerinde Murat Yücedağ’ın hazırlamış olduğu “Real Estate – AspNet Core 8.0 + Api + Dapper” videolarını izliyorum ve bugün itibari ile sekizinci videosunu izledim. Bu yazıdan sonra artık her video için blog yazmaya çalışacağım. Anladıklarımı burada sizlerle paylaşacağım.

Real Estate – AspNet Core 8.0 projesi için Docker

Ben M1 pro işlemcili bir Macbook pro kullandığım için database tarafında Docker kullanmam gerekiyor. Daha doğrusu Docker’da ayağa kaldırılmış bir SQL Server kullanmam gerekiyor. Bunu nasıl yapacağınıza dair ilgili yazıya buradan ulaşabilirsiniz.

docker ayaga kaldir
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 15

İlk olarak SQL Server’ımı Docker üzerinden ayağa kaldırdım.

Videonun ilk kısmı: ID’ye göre kategori getirme

Gelelim videonun asıl içeriğine. ID’ye göre kategori dönme işlemi yapacağımız için ilk olarak Dto tanımlamamız gerekiyor. Çünkü AspNet’te DTO’lar aslında veri taşımak için nesnedirler.

GetByIDCategoryDto Sınıfını Oluşturalım

Bunun için Dtos klasörü altında CategoryDtos klasöründe “GetByIDCategoryDto” isimli bir class tanımlıyorum. Dönen veri aslında ResultCategoryDto sınıfı ile aynı olacağından içeriği bu dosyadan kopyalayabilirim.

using System;
namespace RealEstate_Dapper_Api.Dtos.CategoryDtos
{
	public class GetByIDCategoryDto
	{
           public int CategoryID { get; set; }
           public string CategoryName { get; set; }
           public bool CategoryStatus { get; set; }
        }
}

ICategoryRepository’de Task Oluşturalım

Burada bir task oluşturarak CategoryRepository’de oluşturacağımız sınıfı tanımlamış oluyoruz.

Task<GetByIDCategoryDto> GetCategory(int id);

Task dememizin sebebi bize bir veri dönmesini bekliyoruz. < > parantezler içinde yazdığımız GetByIDCategoryDTO, dönen veriyi hangi sınıftan bir nesneye yazacağını belirtiyor. GetCategory kısmı metodumuzun ismi, parantezler içerisinde “int id” ise metodun dışarıdan beklediği parametre kısmı oluyor.

CategoryRepository’de Metodu implement etme

Elbette ICategoryRepository interface’inde tanımladığımız GetCategory’i CategoryRepository içerisinde implemente etmemiz gerekir.

Bunun için CategoryRepository’ye dönüyoruz.

aspnet core 8.0 ICategoryRepository
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 16

Ekran görüntüsünde gördüğünüz üzere 7. satırda ICategoryRepository bize kızıyor. Altı çizili bir şekilde duruyor. Üzerine gelip “Implement Interface” diyoruz.

aspnet core 8.0
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 17

Bu işlemi yaptığımızda bizim için aşağıda bir kod bloğu oluşturuyor.

aspnet core 8.0
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 18

        public Task<GetByIDCategoryDto> GetCategory(int id)
        {
            throw new NotImplementedException();
        }

Oluşturduğu kod bloğuna yukarıdaki koddan ulaşabilirsiniz.

Aslında artık dapper ile sql kodumuzu yazıp result’ı döndürmemiz kaldı.

        public Task<GetByIDCategoryDto> GetCategory(int id)
        {
            string query = "SELECT * FROM Category WHERE    CategoryID=@CategoryID";
        }

İlk olarak query’mi tanımlıyorum. Category tablosunun tamamında CategoryID’si dışarıdan göndereceğim CategoryID’ye eşit olanı getir diyorum.

Ardından Dapper’ın özelliği olan DynamicParameters nesnesinden bir nesne türetiyorum.

var parameters = new DynamicParameters();

Şimdi ise query stringi üzerinde tanımladığım, dinamik olmasını istediğim @CategoryID’yi parametersa tanımlayacağım ki dışarıdan gönderdiğim id, @CategoryID yerine yazılabilsin.

parameters.Add("@CategoryID", id);

Dinamik parametremizi de tanımladığımıza göre artık isteği atabiliriz. Bunun için şu şekilde bir kod yazmamız gerekiyor;

            using(var connection = _context.CreateConnection())
            {
                var result = await connection.QueryFirstOrDefaultAsync<GetByIDCategoryDto>(query, parameters);
                return result;
            }

Bu kod ile birlikte aslında CategoryRepository’miz tamamlandı. Artık api controller tarafında bu repositoryi kullabailiriz.

CategoryRepository’nin son hali;

        public async Task<GetByIDCategoryDto> GetCategory(int id)
        {
            string query = "SELECT * FROM Category WHERE CategoryID=@CategoryID";

            var parameters = new DynamicParameters();

            parameters.Add("@CategoryID", id);

            using(var connection = _context.CreateConnection())
            {
                var result = await connection.QueryFirstOrDefaultAsync<GetByIDCategoryDto>(query, parameters);
                return result;
            }

        }

CateogriesController

GetCategory aslında bir HttpGet işlemi. Ancak CategoriesController’da zaten bir tane HttpGet isteğimiz var. Dolayısıyla ide bize kızacak. Bunun için yapmamız gereken parametreli olduğunu göstermek.

[HttpGet("{id}")]

Bu şekilde belirtmemiz durumunda artık yeni bir get isteği tanımlayabileceğiz.

        [HttpGet("{id}")]
        public async Task<IActionResult> GetCategory(int id)
        {
            var value = await _categoryRepository.GetCategory(id);
            return Ok(value);
        }

Tanımladığımız kod ise bu şekilde olmalı. Ne yaptık kodda hızlıca bir bakalım. public bir metod oluşturduk. Async ile asenkron bir yapı kurguladık. Task<IActionResult> ile metodun dönüş tipini belirledik. Artıdandan metodun adını ve metodun beklediği parametreyi tanımladık GetCategory(int id) ile.

Kod bloklarının içine bakacak olursak; value tanımladık ve bu value’nun değerini uzun süren bir işlem olduğu için await ile bekledik. Ardından veriyi _categoryRepository sınıfının alt metodu olan GetCategory(id) metodunu çağırdık. İçeriye de dışarıdan gelen id’yi gönderdik. Arından return Ok(value) ile bu api’ye istek atıldığında Ok mesajı döneceğini ve datadan gelen value değişkenini gönderdik.

Videonun ikinci kısmı: İlişkiler

Artık data tarafında işimiz var. Azure Data Studio ile Docker üzerinde ayağa kaldırdığımız SQL Server’a bağlanıyorum. Ardından Murat hocam ilk Product tablosuna EmployeeID ekliyor. Bunun sebebi oluşturulan ilan kim tarafından oluşturuldu aslında bunu tutmak.

product tablosu guncelleme
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 19

Ekran görüntüsünde gösterdiğim gibi Azure Data Studio içerisinde Product tablosuna sağ tıklıyoruz ve ardından Design butonuna basıyoruz. Sonrasında açılan ekranda “New Column” butonuna bastığımızda yeni sütun oluşturuyor ve EmployeeID’yi buraya yazıyoruz.

Diagram Oluşturma

Azure Data Studio’nun varsayılan sürümünde diyagramlar yok. Bunun için bir iki tıklama ile eklenti kuracağız. Yapmamız gereken Extensions ( Shift + CMD + K ) paneline gitmek. Buna sol taraftaki bardan ulaşabilirsiniz.

azure data studio diagram extension
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 20

Ekran görüntüsünde belirttiğim gibi sol panelden ilk önce extensions butonuna tıklayın. Ardından arama kısmına “Schema Visualization” yazın. Görseldeki eklentiyi seçin ve “Download” butonuna basın.

Sizi GitHub sayfasına yönlendirecek.

extensions github
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 21

İşaretlediğim dosyayının üzerine tıklayarak indirin. Ardından Azure Data Studio’ya dönün ve üst bardan File’ı seçin.

file sec
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 22

Gösterdiğim buton yardım yardımı ile indirdiğimiz dosyayı seçiyoruz. İşlem tamam.

Diyagramı görebilmek için aşağıdaki ekran görüntüsündeki adımları izleyin.

diagram open
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 23

İşte diagram karşınızda. Şimdi bu diagram üzerinde oynma yapamıyoruz. Sadece görüntüleme işlemine olanak tanıyor. Peki Foreign Key’leri ( FK ) nasıl tanımlayacağız?

Derse uygun bir şekilde ilerleyelim. Product tablosunda iki tane FK var. Biri ProductCategory diğeri EmployeeID.

Şimdi, Product tablosuna sağ tuş “Design” butonuna basarak design sayfasına gidelim.

fk tanimlama
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 24

Columns sekmesinden Foreign Keys sekmesine geçiş yapalım. Ardından “+ New Foreign Key” butonuna basalım. Alttaki tabloda bir satır oluşacak. İsmini “FK_Category_Product” olarak ayarlayalım. Foreign Table kısmını ise “dbo.Category” olarak seçelim. Ardından sağ panelden Columns altında “New Column Mapping” butonuna basalım.

mapping
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 25

Column kısmına ProductCategory’i seçelim. Foreign Columns kısmında ise CategoryID’yi seçelim.

Aynı işlemi EmployeeID için de yapacağız. Yeni bir foreign key tanımlamak için “+ New Foreign Key” butonuna basın. Ardından adı değiştirin “FK_Employee_Product” yapın. Foreign Table kısmında “dbo.Employee” seçin. Sağ panelden “New Column Mapping” butonuna basarak yeni mapleme işlemi açın. Column kısmına EmployeeID, foreign column kısmına ise EmployeeID seçin. Burada ikisinin de adını aynı verdiğimiz için böyle oldu. Unutmadan CMD + S yardımı ile tabloyu kaydedip “Update” butonuna basıyoruz.

Bir de ProductDetails tablosundaki ProductID’yi FK olarak işaretlememiz gerekiyor. Bunun için ProductDetails tablosuna gitmeliyiz.

Burada da aslında aynı işlemleri uygulayacağız. Size bir ekran görüntüsü bırakıyorum.

product details
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 26

Bu işlemden sonra DbDapperRealEstate database’imize iki kez tıklayıp “Schema Visualization” kısmına tıkladığınızda tabloların birbiri ile bağlantısını görebileceksiniz. Aşağıdaki ekran görüntüsündeki gibi gözükmeli.

iliskilendirilmis tablolar diagram
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 27

Şimdi veri girişi kısmı geldi. Bunun için Employee tablosuna sağ tıklayıp edit data diyorum.

data girisi
Real Estate - AspNet Core 8.0 Eğitimine Başladım - Bölüm 1-8 28

Aynı işlemi ürün tablosu için de gerçekleştirebiliriz.

Böylelikle sekizinci ders tamamlanmış oldu. Bir sonraki dersi yine blog yazısı olarak ekliyor olacağım.

GitHub Linki:

https://github.com/eyupfurkantuylu/real_estate_dapper_api

Bu da butonu

0
mutlu
Mutlu
0
_zg_n
Üzgün
0
sinirli
Sinirli
0
_a_rm_
Şaşırmış
0
k_t_
Kötü
0
beynim_yand_
Beynim Yandı
0
_eytani
Şeytani
Real Estate – AspNet Core 8.0 Eğitimine Başladım – Bölüm 1-8
Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Giriş Yap

Eyüp Furkan Tüylü ayrıcalıklarından yararlanmak için hemen giriş yapın veya hesap oluşturun, üstelik tamamen ücretsiz!