Entity Framework Core Kurulumu
Entity Framework Core, veritabanı üzerinden kolayca işlemler yapmamızı sağlayan bir teknolojidir. İlk başta ihtiyacımız olan nuget paketleri yüklememiz gerek. Nuget package manager üzerinden aşağıdaki paketleri indirip, kuralım:
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Tools
Artık bir DbContext sınıfı oluşturabiliriz. Peki DbContext sınıfı nedir? Yapacağımız web uygulaması ile veri tabanı arasında iletişim kurmamız sağlayacak olan yapıdır. Örneğin, veri tabanında bir belirli bir tabloya veri eklemek istersek, bunu uygulama kodu içerisinde DbContext sınıfından üretilen bir nesne aracılığıyla yapabilmemiz mümkün olacaktır.
using Microsoft.EntityFrameworkCore;
namespace OgrenKelime.Models
{
public class DataContext : DbContext
{
public DataContext(DbContextOptions options) : base(options)
{
}
}
}
Ancak daha bir model oluşturmadık. Hatırlarsanız yazı serisinin başında yabancı dil kelime öğrenme üzerine bir uygulama yapacağımızı söylemiştim. Buna göre Kelime adında bir model oluşturmam gerek. Bu modelin bir id'si, kelime isminin kendisi ve o kelimenin anlamı olacak. Şimdilik üç tane property yeterli gibi ancak ileride muhtemelen bu modeli güncelleyeceğiz. Yine Models klasöründe Kelime adında bir model (Kelime.cs) oluşturalım: namespace OgrenKelime.Models
{
public class Kelime
{
public int Id { get; set; }
public string? SKelime { get; set; }
public string? SAnlam { get; set; }
public DateTime DtKayitTarihi { get; set; }
}
}
Oluşturduğumuz bu model aslında veri tabanında yer alacak olan tabloyu temsil etmektedir. Modeli tanımladığımıza göre artık DbContext içerisinde tablo olarak tanımlama yapabiliriz: using Microsoft.EntityFrameworkCore;
namespace OgrenKelime.Models
{
public class DataContext : DbContext
{
public DataContext(DbContextOptions options) : base(options)
{
}
public DbSet<Kelime> Kelimes { get; set; }
}
}
Uygulamamızın oluşturduğumuz DbContext'den daha haberi yok. O sebeple ilk olarak veri tabanına bağlantı sağlamamız gerek. Bilgisyarınızda MsSQL server kurulu olması lazım ben developer edition'u daha öncesinden kurmuştum, ayrıca SQL Server Managment Studio'u da kurmanız gerekiyor. {
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"TempConnectionString": "Server=localhost;Database=ogrenkelimedb;Trusted_Connection=True;"
}
}
Program.cs dosyamızı açalım: using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.FileProviders;
using OgrenKelime.Models;
var builder = WebApplication.CreateBuilder(args);
// mvc service
builder.Services.AddControllersWithViews();
builder.Services.AddDbContext<DataContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("TempConnectionString")));
...
Sonraki adımımız ef migration'ları çalıştırmak ve yeni veri tabanımızı oluşturmak. VS'den package manager console'u açıp, aşağıdaki komutları sırasıyla girelim: PM> Add-Migration "first migration"
Build started...
Build succeeded.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 6.0.6 initialized 'DataContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer:6.0.6' with options: None
To undo this action, use Remove-Migration.
Proje dizinini incelerseniz Migrations adında bir klasör gelmiş olacak. İlk tablomuzu başarılı bir şekilde oluştuğunu migration dosyası içinde görebiliriz: Sonrasında ikinci komutu girelim. Bu komut sayesinde oluşturuğumuz migration'u kullanarak veri tabanını güncelliyoruz:
PM> Update-Database
Build started...
Build succeeded.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 6.0.6 initialized 'DataContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer:6.0.6' with options: None
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (351ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
CREATE DATABASE [ogrenkelimedb];
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (155ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
IF SERVERPROPERTY('EngineEdition') ≶> 5
BEGIN
ALTER DATABASE [ogrenkelimedb] SET READ_COMMITTED_SNAPSHOT ON;
END;
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (10ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT 1
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (10ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [__EFMigrationsHistory] (
[MigrationId] nvarchar(150) NOT NULL,
[ProductVersion] nvarchar(32) NOT NULL,
CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT 1
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (12ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT OBJECT_ID(N'[__EFMigrationsHistory]');
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT [MigrationId], [ProductVersion]
FROM [__EFMigrationsHistory]
ORDER BY [MigrationId];
Microsoft.EntityFrameworkCore.Migrations[20402]
Applying migration '20220712131011_first migration'.
Applying migration '20220712131011_first migration'.
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [Kelimes] (
[Id] int NOT NULL IDENTITY,
[SKelime] nvarchar(max) NULL,
[SAnlam] nvarchar(max) NULL,
[DtKayitTarihi] datetime2 NOT NULL,
CONSTRAINT [PK_Kelimes] PRIMARY KEY ([Id])
);
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20220712131011_first migration', N'6.0.6');
Done.
Bu işlemden sonra SQL Server Management Studio'dan yeni veri tabanımızın ve eklediğimiz Kelimes tablosunun başarılı bir şekilde oluşturulmuş olduğunu görebiliriz.
Hiç yorum yok: