Bu makaleyi yazmamın sebebi, Entity Framework kurmak, .net framework uygulamalarındaki gibi arayüzden yapılamıyor malesef. Eski .NET Framework projelerine EF eklemek için hatırlarsanız, arayuzden projemize Ado.NET Entity Data Model diye bir item ekliyordun, next next diyerek, bizim için EF’yi Db Context’i Connection stringi vs olusturmasını sağlıyorduk.
Ancak ben eğitim verdiğim sınıflarda, öğrencilere ısrarla, boş bir projeye, sıfırdan, kod yoluyla entity framework kurmayı defalarca gösterdim. İşte onun meyvelerini şimdi toplayacaklar. Çünkü .net 6 projesine arayuzden ekleyebileceğiniz bir Ado.Net Entity Model item’ı yok 🙂 Herseyi mecburen kod yoluyla yapmak zorundasınız. Ve dikkat edilmesi gereken 1-2 ince nüans var. İşte bu adımları sıra sıra size gösteren yazımız burda devreye giriyor.
Bunun için en son bulunan AllowedHosts değerinin sonuna bir virgül koyup alt satıra geçiyoruz. Çift tırnağı açıp C yazdığımızda zaten IDE bize, ConnectionStrings mi yazmak istiyorsun diyecektir. Tamamlamamıza yardımcı olacaktır.
ConnectionStrings dedikten sonra “: { şeklinde bir ifade ile süslü parantez açıyoruz. Çünkü, bir projede tanımlı birden fazla ConnectionStrings olabilir, 3-4 veri tabanı ile çalışan bir uygulama yazıyor olabilirsiniz. O yüzden içerisinde birden fazla değer alabilecek bir yapıda oluşturmuşlar.
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "ConnectionStrings": { "DefaultConnection": "Server:sunucu.com; Database=NET6; User Name=KULLANICIADI; Password=SIFRE; Trusted_Connection=true " } }
public class NorthwindDbContext:DbContext { public NorthwindDbContext(DbContextOptions<NorthwindDbContext> options):base(options) { } }
Class’ımızı DbContext ‘ten katılıyoruz. Bunu yaptıgımızda, bizim için otomatik tamamlamayacaktır ve altını kırmızı çizecektir. Burada CTRL+Nokta dediğimizde, bize alternatif olarak, EntityFrameworkCore kurayım mı diye soracaktır.
Buradan Microsoft.EntityFrameworkCore u seçip son sürümünü indir dememiz gerekiyor. Ardından yazmakta olduğumuz DbContext yazısı rengini bulacaktır 🙂
ardından ctor yazıp, tab tab yapıyoruz ve bizim için bir constructor metodunun oluşmasını sağlıyoruz. Burada eski .net framework’ten farklı olarak, constructor metodumuzun parametre kısmına bir bilgi girmemiz gerekiyor.
public class NorthwindDbContext:DbContext { public NorthwindDbContext(DbContextOptions<NorthwindDbContext> options) : base(options) { } }
Burada söylemeye çalıştığımız şey:
.Net Framework zamanında, ctor’umuzu sadece base ctor’dan kalıtıyorduk ve oraya “name=connectionstringAdı” gonderiyorduk. Bu ne anlama geliyordu ? Bizim DbContext classımız örneklendiğinde, asıl dbcontext sınıfının ctor’unu connetion stringimizle çalıştırsın ve bize bir nesne göndersin demekti.
Ancak buradaki çalışma şekli farklı. Burada, direkt oluşturmus oldugumuz NorthwindDbContext’in ctorunu, dışarıdan DbContextOptions alabilir hale getiriyoruz. ve aldıgımız option’ı da ana klasın ctor’una paslıyoruz.
Neden böyle yapıyoruz ?
Çünkü .NET 6’da program.cs diye bir yerin varlıgından bahsetmiştik. Biz uygulamamıza, program.cs içerisinde, ilerleyen adımlarda “senin bir db contextin olacak, onun adı da şu olacak bilgin olsun” diyeceğiz, kullanacağı özellikler de şunlar şunlar olacak diyip, options’ları oradan göndereceğiz.
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddDbContext<NorthwindDbContext>(options=>options.UseSqlServer);
Program.cs’de builder.Services.AddControllersWithViews() çağrısının hemen altına, bu programımızın bir db dontext kullanacağını belirtmemiz gerekiyor.
Yalnız burada options’tan sonra nokta koyup UseSqlServer dediğimizde, IDE altını çizecektir ve ctrl+nokta dediğimizde hiç birşey çıkartmayacaktır malesef 🙁 Burada gidip biliçli olarak Nuget Package Manager üzerinden bir paket indirmemiz lazım. Ya da konsol’dan install-package yazarak bir paket indirmemiz lazım. Nedir bu paketin ismi ? “Microsoft.EntityframeworkCore.SqlServer“. Önceki klasik .net Framework’unde bunu yapmamıza gerek kalmıyordu. EF’yi indirdiğimizde, sqlserver kullanımı ile alakalı kutuphaneleri arka planda çekiyordu yada kendi içerisinde barındırıyordu. Ancak sanırım, .net 5’den itibaren, platform bağımsızlığını daha bi ön plana çıkartmaya çalışan Microsoft firması, EFCORE ile birlikte zorla SqlServer özelliklerini indirtip, ayrıcalık tanımıyor, herkes benim için eşit diyor ve isteyen, istediği db’nin kutuphanesini kendisi indirsin diyor.
Package Manager’dan yada PM Console’dan “Microsoft.EntityframeworkCore.SqlServer” ‘ı indirdikten sonra, kodumuzu şekillendirmeye devam edebiliriz. Hala UseSqlServer’ın altı çizili ise şimdi artık CTRL+Nokta diyebilirsiniz ve size “Microsoft.EntityFrameworkCore”‘u using kısmına ekşyeyeim mi diye soracaktır. Seçip, yolumuza devam edebiliriz.
Ve işte bu noktada “UseSqlServer()” dediğimizde, tam bu noktada ona connection stringimizi söylememiz gerekiyor. Yani Sql Server Kullanacaksın, onu da bu connetion stringle kullanacaksın dememiz gerekiyor.
UseSqlServer( içerisine, direkt string olarak connection string yazarsak yine çalışacaktır. Ancak bu sefer appsettings.json kullanmamızın bir anlamı kalmayacaktır. O yuzden oraya bir komut yazarak, connection string’i appsettings içerisinden seçmesini sağlamamız gerekiyor.
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddDbContext<NorthwindDbContext>(options=>options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnectionString")));
burada gordugunuz gibi, builder. dediğimizde onun Configuration kısmından getConnectionString metodunu çağırıyoruz ve içerisine appsettings json içerisinde belirlediğimiz connection string ismini gönderiyoruz.
Bunun için PM Konsol’u açıp bir komut yazmamız gerekiyor. Bu komut şu şekilde :
Scaffold-DbContext [-Connection] [-Provider] [-OutputDir]
Çalıştırmak için kendi verilerimizle yazalım :
Scaffold-DbContext "Server=.\SQLEXPRESS;Database=Northwind;Integrated Security=True" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -f
Ve durun tahmin edeyim, şöyle bir hata aldınız değil mi ? 🙂
Burada dediği şey, aslında, Scaffold diye bir komut tanımadığı.. Bunu gidermek için, bir tane daha paket indirmemiz gerekiyor 🙂
O da Microsoft.EntityFrameworkCore.Tools bunu kurduktan sonra artık komut satırından gönderdiğimiz komutları algılar hale gelecektir. Hatırlarsanız benzer sorun, önceki versionlarda, ado.net entity data model ile EF kurulumu yaptığımızda, eski versionu indiriyordu ve girip guncelleme çekmek zorunda kalıyorduk ve sonrasında çalışır hale geliyordu.
Hiç yukarılara gitmeden, hazır PM Console ekranındayken hemen install-package komutu ile indirelim
install-package Microsoft.EntityFrameworkCore.Tools
Bunu kurduktan sonra, yukarıdaki Scaffold’u çalıştırdıgımızda o bizim için bütün tablolarımızın ve viewlarımızın modellerini oluşturacak. Ve artık EntityFramework’umuz kullanıma hazır.
Bundan sonra yapacağımız şey, yeni bir view oluşturup, yeni bir controller aracılığı ile, controller’dan view’a data gonderip, onu view içerisinde göstermek.. Sonrakı yazımda görüşmek üzere
There are two kinds of questions: yes or no questions and wh- questions. You ask…
A positive sentence tells you that something is so. A sentence that tells you something…
Use the base form of a verb to give commands or make direct requests. This…
A sentence is a group of words that expresses a complete thought. A sentence must…
An interjection is a word that expresses a sudden, strong feeling such as surprise, pain,…
A conjunction is a linking word such as and, or, but. Conjunctions are used to…