Model bölümü Veritabanı ile direkt bağlantı kuran kısımdır. Controller vasıtasıyla View bölümüne veri aktarabilir. Ayrıca, doğrulama işlemleri bu katmanda yapılır.
Razor Pages bölümünde olduğu gibi Veritabanı ile çalışmak için Entity Framework Core (EF Core) kullanılacak. Ancak bu bölümde farklı bir Veritabanı olarak SQLite kullanmayı düşünüyorum. Öncelikle, Models klasörüne Movie.cs aşağıdaki gibi basit bir sınıf oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 |
using System; namespace MvcMovie.Models { public class Movie { public int ID { get; set; } public string Title { get; set; } public DateTime ReleaseDate { get; set; } public string Genre { get; set; } public decimal Price { get; set; } } } |
02.03.01. Scaffolding işlemine hazırlama
Scaffolding işlemi ile CRUD işlemleri otomatik olarak yaratabileceğimizi anlatmıştık. Öncelikle …csproj dosyasına aşağıdaki satırları ekleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.2</TargetFramework> <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel> <EnableDefaultRazorTargetAssemblyInfoAttributes>false</EnableDefaultRazorTargetAssemblyInfoAttributes> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" /> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SQLite" Version="2.2.0" /> </ItemGroup> </Project> |
Dosyayı kaydedip, projeyi tekrar yükleyin. Yükleme konusunda VS Code bir uyarı verecektir. Models klasörüne MvcMovieContext.cs dosyasını yaratıp aşağıdaki satırları yazalım. Bu işlem Veritabanı ile konuşacak olan context’i hazırlıyor. Sağolsun, birçok işlemi bizim yerimize yerine getirecek önemli bir işlemdir. Startup.cs dosyasına aşağıdaki işaretli satırları ekleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.EntityFrameworkCore; using MVC3_Model.Models; namespace MVC3_Model { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); services.AddDbContext<MvcMovieContext>(options => options.UseSqlite("Data Source=MvcMovie.db")); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } } } |
İlk işaretli satırlar ile EF Core ve Models bölümü aktive ediliyor. Üçüncü ve Dördüncü işaretli satır ile SQLite Veritabanı aktive edilir. Şimdi projeyi tekrar yükleyip (Aşağıdaki restore koduyla yapılabilir), ardından aspnet-codegenerator ile CRUD sayfalarını Views bölümüne oluşturalım. Terminal’i açalım ve aşağıdaki kodları sıra ile çalıştıralım.
1 |
D:\Users\...\ASP.NET\MVC\MVC3_Model>dotnet restore |
1 |
D:\Users\ErdincUzun\ASP.NET\MVC\MVC3_Model>dotnet aspnet-codegenerator controller -name MoviesController -m Movie -dc MvcMovieContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries |
Eğer dosyaları yüklediyseniz ve tekrar yüklemeye ihtiyaç duyarsanız “-f” parametresini ikinci koda ekleyin. Bu işlem mevcut dosyalarının üzerine yazıyor.
Views bölümünde Movies klasörünü inceleyin.
02.03.02. Veritabanı yaratma kodunu oluşturma
Mevcut model üzerinden eğer Veritabanı oluşturmak isterseniz aşağıdaki kodları kullanabilirsiniz. Terminali açalım ve aşağıdaki kodu çalıştıralım.
1 |
dotnet ef migrations add InitialCreate |
Models/MvcMovieContext.cs dosyası yaratılması kullanarak tablo yaratma kodlarını üretir. Aşağıdaki kodla Migrations klasörünü dosyanın güncel versiyonunu yükleyebilirsiniz.
1 |
dotnet ef database update |
Migrations/<zaman damgası>_InitialCreate.cs şeklinde bir yaratma dosyası oluşturur.