• Tidak ada hasil yang ditemukan

Modifikasi File Class Model GuestBook

Pada class model GuestBook sebelumnya belum dimiliki property Id. Maka perlu ditambahkan property Id sebagai primary key. Berikut adalah isi file class model GuestBook yang telah dimodifikasi.

GuestBook.cs using System;

namespace EFCoreGuestBook.Models {

public partial class GuestBook{ public int Id {set; get;} public String Email {set; get;} public String Name {set; get;} public String Message {set; get;} }

}

Membuat File Class GuestBookDataContext.cs

File class ini merupakan turunan dari class DbContext. Class ini adalah class utama yang bertanggung jawab agar interaksi data sebagai object dapat dilakukan. Class ini mengelola entity object selama aplikasi berjalan, untuk melakukan pembentukan object-object yang menampung data dari database, melacak perubahan dan menyimpan data ke database. File class GuestBookDataContext.cs disimpan di dalam folder Models. Berikut adalah isi dari file ini.

GuestBookDataContext.cs

using Microsoft.EntityFrameworkCore;

using MySQL.Data.EntityFrameworkCore.Extensions; namespace EFCoreGuestBook.Models{

public class GuestBookDataContext : DbContext {

public static string ConnectionString { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

{

optionsBuilder.UseMySQL(ConnectionString); }

protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<GuestBook>(entity => { entity.Property(e => e.Id).HasColumnName("guestbook_id"); entity.Property(e => e.Email).HasColumnName("guest_email"); entity.Property(e => e.Name).HasColumnName("guest_name"); entity.Property(e => e.Message).HasColumnName("message"); }); }

public virtual DbSet<GuestBook> GuestBooks { get; set; } }

78 Pada baris pertama dapat dilihat penggunaan namespace Microsoft.EntityFrameworkCore untuk implementasi EF Core dan agar class DbContext dapat digunakan. Sehingga dapat dilihat class GuestBookDataContext dibuat sebagai turunan dari class DbContext.

Pada baris kedua digunakan namespace MySQL.Data.EntityFrameworkCore.Extensions sebagai implementasi provider MySQL untuk EF Core. Sehingga dapat dilihat penggunaan method UseMySQL pada object optionBuilder.

Hal penting selanjutnya adalah melakukan mapping antara property-property class model GuestBook dengan atribut-atribut pada tabel guestbooks seperti pada penggalan kode berikut. modelBuilder.Entity<GuestBook>(entity => { entity.Property(e => e.Id).HasColumnName("guestbook_id"); entity.Property(e => e.Email).HasColumnName("guest_email"); entity.Property(e => e.Name).HasColumnName("guest_name"); entity.Property(e => e.Message).HasColumnName("message"); });

Dari kode di atas dapat dilihat pemetaan sebagai berikut: 1. Property Id dengan atribut guestbook_id. 2. Property Email dengan atribut guest_email. 3. Property Name dengan atribut guest_name. 4. Property Message dengan atribut message.

Sehingga dapat disimpulkan untuk melakukan mapping antara property class dengan atribut tabel digunakan sintaks berikut ini.

entity.Property(e => e.{ObjectProperty}).HasColumnName("{TableAttribute}")

Keterangan:

1. ObjectProperty adalah nama property dari class. 2. TableAttribute adalah nama atribut dari table.

Terakhir memetakan antara class GuestBook dengan tabel guestbooks dengan sintaks berikut ini.

public virtual DbSet<{ClassName}> {TableName} { get; set; }

Modifikasi File Startup.cs

Yang perlu ditambahkan pada file ini adalah baris berikut ini ke dalam method ConfigureServices. Baris ini berfungsi untuk menentukan connection string yang akan digunakan class GuestBookDataContext.

GuestBookDataContext.ConnectionString =

Configuration.GetConnectionString("Default");

Sehingga dapat dilihat isi lengkap file Startup.cs sebagai berikut.

Startup.cs using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Configuration; using EFCoreGuestBook.Models; namespace EFCoreGuestBook {

public class Startup {

79

public static IConfigurationRoot Configuration { get; set; } public Startup(IHostingEnvironment env)

{

var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath)

.AddJsonFile("appsettings.json", optional: true,

reloadOnChange: true)

.AddEnvironmentVariables(); Configuration = builder.Build(); }

// This method gets called by the runtime. Use this method to add services to the container.

// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940

public void ConfigureServices(IServiceCollection services) {

services.AddMvc();

GuestBookDataContext.ConnectionString =

Configuration.GetConnectionString("Default"); }

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

{ loggerFactory.AddConsole(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } } }

Modifikasi File Class Controller HomeController

Langkah selanjutnya adalah implementasi EF Core pada HomeController untuk menampilkan data dan menyimpan data ke dalam database. Langkah pertama adalah menambahkan baris berikut ini.

using EFCoreGuestBook.Models;

Dengan menambahkan baris tersebut maka class-class pada namespace EFCoreGuestBook.Models dapat digunakan pada class HomeController. Berikut ini adalah kode lengkap isi file class controller HomeController.cs.

HomeController.cs using System.Linq;

80

using Microsoft.AspNetCore.Mvc; using EFCoreGuestBook.Models;

namespace EFCoreGuestBook.Controllers {

public class HomeController : Controller {

[HttpGet]

public IActionResult Index() {

GuestBookDataContext db = new GuestBookDataContext(); var items = db.GuestBooks.ToList();

return View(items); }

[HttpGet]

public IActionResult Create(){ return View();

}

[HttpPost]

public IActionResult Create(GuestBook item){ if(ModelState.IsValid){

GuestBookDataContext db = new GuestBookDataContext(); db.Add(item); db.SaveChanges(); return RedirectToAction("Index"); } return View(); } [HttpGet]

public IActionResult Error() {

return View(); }

} }

Untuk mengambil data dari tabel dapat dilihat pada method action Index, yang cukup dilakukan dengan dua baris kode berikut ini.

GuestBookDataContext db = new GuestBookDataContext(); var items = db.GuestBooks.ToList();

Dapat pada baris kedua cara untuk mengambil data dari tabel pada database, kemudian datanya disimpan dalam bentuk object items. Selanjutnya object items dikirimkan ke komponen view Index.cshtml untuk ditampilkan dengan cara berikut.

return View(items);

Sedangkan untuk menginput data ke dalam tabel yang sesuai dengan object GuestBook dapat dilakukan dengan langkah berikut. Pertama object yang diisikan nila-nilainya dari komponen view Create.cshtml sehingga pada method action Create dapat dilihat parameter item seperti kode berikut ini.

public IActionResult Create(GuestBook item){ }

Kemudian object item akan disimpan ke dalam database dengan cara di bawah ini.

GuestBookDataContext db = new GuestBookDataContext(); db.Add(item);

db.SaveChanges();

Dan sekarang aplikasi EFCoreGuestBook telah dapat dijalankan dan digunakan. Tidak perlu ada modifikasi atau perubahan pada komponen view.

81

Kesimpulan

Pada bab ini dijelaskan cara kerja ASP.NET Core MVC dan cara-cara untuk melakukan koneksi dan operasi ke database MySQL dari aplikasi web ASP.NET Core MVC. Sehingga pembaca sudah dapat menyiapkan project dan melakukan konfigurasi. Pada bab selanjutnya akan mengulang penjelasan tentang komponen model, view dan controller, namun penjelasan lebih detail.

82

5

Dokumen terkait