Model
Model bertugas mengelola data, logika dan peraturan suatu aplikasi. Model berinteraksi langsung dengan database.
Menambah model
Pada folder Model, buat file baru dengan nama 'Movie.cs' isi file tersebut dengan kode berikut (sesuaikan namespace):
using System;
using System.ComponentModel.DataAnnotations;
namespace MvcMovie.Models
{
public class Movie
{
public int Id { get; set; }
public string Title { get; set; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set;}
public string Genre { get; set; }
public decimal Price { get; set; }
}
}Menginstall Library Entity Framework
pada terminal, jalankan:
dotnet tool install --global dotnet-efUntuk menginstall model, cek jika berhasil menggunakan dotnet ef, jike berhasil akan muncul logo EF
Pada terminal, pada directory proyek, jalankan:
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Pomelo.EntityFrameworkCore.MySqlUntuk menambah package yang diperlukan, cek pada file MvcMovie.csproj atau sesuai dengan nama proyek, cek apakah ada dua baris berikut (jangan ditulis manual!):
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.9">
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.1" />Membuat DbContext
Kita akan melakukan pendekatan code-first, yaitu membuat kode nya untuk menghasilkan database. Untuk itu diperlukan juga sebuah DbContext.
DbContext pada dasarnya adalah cara kita mengakses database dari kode.
Buatlah folder Data baru, lalu didalamnya buat file MvcMovieDbContext.cs, lalu isi file tersebut dengan kode berikut:
using Microsoft.EntityFrameworkCore;
using MvcMovie.Models;
namespace MvcMovie.Data
{
public class MvcMovieDbContext : DbContext
{
public MvcMovieDbContext (DbContextOptions<MvcMovieDbContext> options) : base(options)
{ }
public DbSet<Movie> Movies { get; set; }
}
}Di kode tersebut, DbSet merupakan representasi dari 'Tabel' di database, jadi DbSet<Movie> merupakan tabel Movie. Dimana Movie adalah model yang sudah kita buat tadi.
Mengatur proyek agar menggunakan DbContext
Pada file Startup.cs, pada bagian paling atas, tambah namespace-namespace yang kita perlukan, yakni:
using MvcMovie.Data;
using Microsoft.EntityFrameworkCore;
using Pomelo.EntityFrameworkCore.MySql;lalu pada method ConfigureServices, tambah
services.AddDbContext<MvcMovieDbContext>(option =>
{
var connectionString = Configuration.GetConnectionString("MovieApp");
var serverVersion = new MariaDbServerVersion(new Version(10, 6, 4));
option.UseMySql(connectionString, serverVersion);
});di bagian akhir. Untuk version, disitu tertulis 10, 6, 4. Ganti sesuai dengan versi mariadb.
Untuk mengetahui versi mariadb dapat menjalankan query berikut:
SELECT VERSION();Setelah itu, kita perlu memberi program kita 'ConnectionString' yang digunakan untuk mengkoneksikan ke database.
Buka file appsettings.Development.json, lalu masukkan
"ConnectionStrings": {
"MovieApp": "Server=localhost;Database=movieapp;Uid=root;Pwd=123456;sslmode=none;pooling=false"
}dibagian akhir, sehingga menjadi (perhatikan koma):
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"MovieApp": "Server=localhost;Database=movieapp;Uid=root;Pwd=123456;sslmode=none;pooling=false"
}
}ganti '123456' dengan password root mariadb kalian.
Membuat migrasi
Sebelum membuat database, kita perlu membuat sebuah 'migrasi'
Pada terminal jalankan perintah:
dotnet ef migrations add InitialSetelah dijalankan akan muncul folder 'Migrations' yang berisi skema migrasi.
Membuat database
Pada saat ini program kita sudah memiliki skema untuk database sekarang kita harus membuat database untuk menampung semua datanya.
Pada bagian 'ConnectionString' kita sudah menyantumkan bahwa nama database nya adalah 'movieapp'
Maka buatlah database bernama 'movieapp' pada mariadb
Setelah database sudah dibuat, jalankan perintah berikut pada terminal:
dotnet ef database updateRefresh database kalian untuk melihat hasilnya, jika berhasil, seharusnya ada tabel baru: Movies
Sebagai uji coba, cobalah masukkan beberapa data ke tabel Movies, berikut contohnya menggunakan query:
INSERT INTO Movies(Title, ReleaseDate, Genre, Price)
VALUES("The Lord of The Rings", "2001-12-19", "Fantasy", 500000);Menampilkan data ke view
Pada controller MovieController, buatlah sebuah instance variable baru dengan tipe MvcMovieDbContext (yang tadi dibuat), lalu beri nama variable tersebut _context
Lalu ubah constructornya menjadi seperti berikut:
public MovieController(MvcMovieDbContext context)
{
_context = context;
}Sekarang kita sudah memiliki akses ke DbContext -- database kita
Ubahlah method index untuk mengirimkan daftar movie nya:
public IActionResult Index()
{
return View(_context.Movies.ToList());
}Lalu pada view Index.cshtml di Movie, bagian paling atas file tambah:
@model IEnumerable<Movie>agar dapat mengakses daftar model movie yang tadi kita kirimkan, ubah juga tampilannya, untuk menampilkan daftar movie, secara keseluruhan, file Index.cshtml akan menjadi seperti berikut:
@model IEnumerable<Movie>
@{
ViewData["Title"] = "Movie App";
}
<h1>Welcome to the movie app</h1>
<p>Movie list:</p>
<ul>
@foreach (var item in Model)
{
<li>@item.Title (@item.ReleaseDate.Year) - Rp. @Math.Round(item.Price)</li>
}
</ul>Last updated