Bagian 2, tambahkan model ke Razor aplikasi Pages di ASP.NET Core
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Dalam tutorial ini, kelas ditambahkan untuk mengelola film dalam database. Kelas model aplikasi menggunakan Entity Framework Core (EF Core) untuk bekerja dengan database. EF Core adalah pemeta relasional objek (O/RM) yang menyederhanakan akses data. Anda menulis kelas model terlebih dahulu, dan EF Core membuat database.
Kelas model dikenal sebagai kelas POCO (dari "P lain-O ld CLR Objects") karena mereka tidak memiliki dependensi pada EF Core. Mereka menentukan properti data yang disimpan dalam database.
Menambahkan model data
Di Penjelajah Solusi, klik kanan proyek >RazorPagesMovie Tambahkan>Folder Baru. Beri nama folder
Models
.Models
Klik kanan folder. Pilih Tambahkan>Kelas. Beri nama kelas Film.Tambahkan properti berikut ke
Movie
kelas :using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.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; } }
Kelas Movie
berisi:
Bidang
ID
diperlukan oleh database untuk kunci utama.Atribut [DataType] yang menentukan jenis data dalam
ReleaseDate
properti . Dengan atribut ini:- Pengguna tidak diharuskan memasukkan informasi waktu di bidang tanggal.
- Hanya tanggal yang ditampilkan, bukan informasi waktu.
Tanda tanya setelah
string
menunjukkan bahwa properti dapat diubah ke null. Untuk informasi selengkapnya, lihat Jenis nilai yang dapat diubah ke null.
DataAnnotations dibahas dalam tutorial selanjutnya.
Bangun proyek untuk memverifikasi tidak ada kesalahan kompilasi.
Perancah model film
Di bagian ini, model film di-scaffold. Artinya, alat perancah menghasilkan halaman untuk operasi Buat, Baca, Perbarui, dan Hapus (CRUD) untuk model film.
Buat folder Halaman/Film:
- Klik kanan pada folder >Halaman Tambahkan>Folder Baru.
- Beri nama folder Film.
Klik kanan pada folder> Halaman/Film Tambahkan>Item Perancah Baru.
Dalam dialog Tambahkan Perancah Baru, pilih Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD)>Tambahkan.
Selesaikan dialog Tambahkan Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD):
- Di menu drop-down Kelas model , pilih Film (RazorPagesMovie.Models).
- Di baris Kelas konteks data, pilih + tanda (plus).
- Dalam dialog Tambahkan Konteks Data, nama
RazorPagesMovie.Data.RazorPagesMovieContext
kelas dibuat. - Di menu drop-down Penyedia database, pilih SQL Server.
- Dalam dialog Tambahkan Konteks Data, nama
- Pilih Tambahkan.
File appsettings.json
diperbarui dengan string koneksi digunakan untuk menyambungkan ke database lokal.
Peringatan
Artikel ini menggunakan database lokal yang tidak mengharuskan pengguna untuk diautentikasi. Aplikasi produksi harus menggunakan alur autentikasi paling aman yang tersedia. Untuk informasi selengkapnya tentang autentikasi untuk aplikasi pengujian dan produksi yang disebarkan, lihat Mengamankan alur autentikasi.
File dibuat dan diperbarui
Proses perancah membuat file berikut:
- Halaman/Film: Buat, Hapus, Detail, Edit, dan Indeks.
Data/RazorPagesMovieContext.cs
File yang dibuat dijelaskan dalam tutorial berikutnya.
Proses perancah menambahkan kode yang disorot berikut ke Program.cs
file:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/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.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages();
app.Run();
Perubahan Program.cs
dijelaskan nanti dalam tutorial ini.
Membuat skema database awal menggunakan fitur migrasi EF
Fitur migrasi di Entity Framework Core menyediakan cara untuk:
- Buat skema database awal.
- Perbarui skema database secara bertahap agar tetap sinkron dengan model data aplikasi. Data yang ada dalam database dipertahankan.
Di bagian ini, jendela Package Manager Console (PMC) digunakan untuk:
Tambahkan migrasi awal.
Perbarui database dengan migrasi awal.
Dari menu Alat, pilih Pengelola Paket NuGet>Konsol Pengelola Paket.
Di PMC, masukkan perintah berikut:
Add-Migration InitialCreate
Perintah
Add-Migration
menghasilkan kode untuk membuat skema database awal. Skema didasarkan pada model yang ditentukan dalamDbContext
. ArgumenInitialCreate
digunakan untuk memberi nama migrasi. Nama apa pun dapat digunakan, tetapi menurut konvensi, nama dipilih yang menjelaskan migrasi.
Peringatan berikut ditampilkan, yang ditangani di langkah selanjutnya:
Tidak ada jenis yang ditentukan untuk kolom desimal 'Harga' pada jenis entitas 'Film'. Ini akan menyebabkan nilai terpotong secara diam-diam jika tidak cocok dalam presisi dan skala default. Tentukan jenis kolom server SQL secara eksplisit yang dapat mengakomodasi semua nilai menggunakan 'HasColumnType()'.
Di PMC, masukkan perintah berikut:
Update-Database
Perintah
Update-Database
menjalankanUp
metode dalam migrasi yang belum diterapkan. Dalam hal ini, perintah menjalankanUp
metode dalamMigrations/<time-stamp>_InitialCreate.cs
file, yang membuat database.
Konteks RazorPagesMovieContext
data :
- Berasal dari Microsoft.EntityFrameworkCore.DbContext.
- Menentukan entitas mana yang disertakan dalam model data.
- EF Core Mengoordinasikan fungsionalitas, seperti Buat, Baca, Perbarui, dan Hapus, untuk model tersebut
Movie
.
Kelas RazorPagesMovieContext
dalam file Data/RazorPagesMovieContext.cs
yang dihasilkan :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
}
}
Kode sebelumnya membuat properti DbSet<Movie> untuk kumpulan entitas. Dalam terminologi Entity Framework, kumpulan entitas biasanya sesuai dengan tabel database. Entitas sesuai dengan baris dalam tabel.
Nama string koneksi diteruskan ke konteks dengan memanggil metode pada objek DbContextOptions. Untuk pengembangan lokal, sistem Konfigurasi membaca string koneksi dari appsettings.json
file.
Menguji aplikasi
Jalankan aplikasi dan tambahkan
/Movies
ke URL di browser (http://localhost:port/movies
).Jika Anda menerima kesalahan berikut:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Anda melewatkan langkah migrasi.
Uji tautan Buat Baru.
Catatan
Anda mungkin tidak dapat memasukkan koma desimal di
Price
bidang . Untuk mendukung validasi jQuery untuk lokal non-Bahasa Inggris yang menggunakan koma (",") untuk titik desimal dan untuk format tanggal non-Bahasa Inggris AS, aplikasi harus di globalisasi. Untuk instruksi globalisasi, lihat masalah GitHub ini.Uji tautan Edit, Detail, dan Hapus.
Tutorial berikutnya menjelaskan file yang dibuat oleh perancah.
Memeriksa konteks yang terdaftar dengan injeksi dependensi
ASP.NET Core dibangun dengan injeksi dependensi. Layanan, seperti EF Core konteks database, terdaftar dengan injeksi dependensi selama startup aplikasi. Komponen yang memerlukan layanan ini (seperti Razor Pages) disediakan melalui parameter konstruktor. Kode konstruktor yang mendapatkan instans konteks database ditampilkan nanti dalam tutorial.
Alat perancah secara otomatis membuat konteks database dan mendaftarkannya dengan kontainer injeksi dependensi. Kode yang disorot berikut ditambahkan ke Program.cs
file oleh perancah:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/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.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages();
app.Run();
Pemecahan masalah dengan sampel yang telah selesai
Jika Anda mengalami masalah yang tidak dapat Anda atasi, bandingkan kode Anda dengan proyek yang telah selesai. Lihat atau unduh proyek yang selesai (cara mengunduh).
Langkah berikutnya
Dalam tutorial ini, kelas ditambahkan untuk mengelola film dalam database. Kelas model aplikasi menggunakan Entity Framework Core (EF Core) untuk bekerja dengan database. EF Core adalah pemeta relasional objek (O/RM) yang menyederhanakan akses data. Anda menulis kelas model terlebih dahulu, dan EF Core membuat database.
Kelas model dikenal sebagai kelas POCO (dari "P lain-O ld CLR Objects") karena mereka tidak memiliki dependensi pada EF Core. Mereka menentukan properti data yang disimpan dalam database.
Menambahkan model data
Di Penjelajah Solusi, klik kanan proyek >RazorPagesMovie Tambahkan>Folder Baru. Beri nama folder
Models
.Models
Klik kanan folder. Pilih Tambahkan>Kelas. Beri nama kelas Film.Tambahkan properti berikut ke
Movie
kelas :using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.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; } }
Kelas Movie
berisi:
Bidang
ID
diperlukan oleh database untuk kunci utama.Atribut [DataType] yang menentukan jenis data dalam
ReleaseDate
properti . Dengan atribut ini:- Pengguna tidak diharuskan memasukkan informasi waktu di bidang tanggal.
- Hanya tanggal yang ditampilkan, bukan informasi waktu.
Tanda tanya setelah
string
menunjukkan bahwa properti dapat diubah ke null. Untuk informasi selengkapnya, lihat Jenis nilai yang dapat diubah ke null.
DataAnnotations dibahas dalam tutorial selanjutnya.
Bangun proyek untuk memverifikasi tidak ada kesalahan kompilasi.
Perancah model film
Di bagian ini, model film di-scaffold. Artinya, alat perancah menghasilkan halaman untuk operasi Buat, Baca, Perbarui, dan Hapus (CRUD) untuk model film.
Buat folder Halaman/Film:
- Klik kanan pada folder >Halaman Tambahkan>Folder Baru.
- Beri nama folder Film.
Klik kanan pada folder> Halaman/Film Tambahkan>Item Perancah Baru.
Dalam dialog Tambahkan Perancah Baru, pilih Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD)>Tambahkan.
Selesaikan dialog Tambahkan Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD):
- Di menu drop-down Kelas model , pilih Film (RazorPagesMovie.Models).
- Di baris Kelas konteks data, pilih + tanda (plus).
- Dalam dialog Tambahkan Konteks Data, nama
RazorPagesMovie.Data.RazorPagesMovieContext
kelas dibuat. - Di menu drop-down Penyedia database, pilih SQL Server.
- Dalam dialog Tambahkan Konteks Data, nama
- Pilih Tambahkan.
File appsettings.json
diperbarui dengan string koneksi digunakan untuk menyambungkan ke database lokal.
Peringatan
Artikel ini menggunakan database lokal yang tidak mengharuskan pengguna untuk diautentikasi. Aplikasi produksi harus menggunakan alur autentikasi paling aman yang tersedia. Untuk informasi selengkapnya tentang autentikasi untuk aplikasi pengujian dan produksi yang disebarkan, lihat Mengamankan alur autentikasi.
File dibuat dan diperbarui
Proses perancah membuat file berikut:
- Halaman/Film: Buat, Hapus, Detail, Edit, dan Indeks.
Data/RazorPagesMovieContext.cs
File yang dibuat dijelaskan dalam tutorial berikutnya.
Proses perancah menambahkan kode yang disorot berikut ke Program.cs
file:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/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.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Perubahan Program.cs
dijelaskan nanti dalam tutorial ini.
Membuat skema database awal menggunakan fitur migrasi EF
Fitur migrasi di Entity Framework Core menyediakan cara untuk:
- Buat skema database awal.
- Perbarui skema database secara bertahap agar tetap sinkron dengan model data aplikasi. Data yang ada dalam database dipertahankan.
Di bagian ini, jendela Package Manager Console (PMC) digunakan untuk:
Tambahkan migrasi awal.
Perbarui database dengan migrasi awal.
Dari menu Alat, pilih Pengelola Paket NuGet>Konsol Pengelola Paket.
Di PMC, masukkan perintah berikut:
Add-Migration InitialCreate
Perintah
Add-Migration
menghasilkan kode untuk membuat skema database awal. Skema didasarkan pada model yang ditentukan dalamDbContext
. ArgumenInitialCreate
digunakan untuk memberi nama migrasi. Nama apa pun dapat digunakan, tetapi menurut konvensi, nama dipilih yang menjelaskan migrasi.
Peringatan berikut ditampilkan, yang ditangani di langkah selanjutnya:
Tidak ada jenis yang ditentukan untuk kolom desimal 'Harga' pada jenis entitas 'Film'. Ini akan menyebabkan nilai terpotong secara diam-diam jika tidak cocok dalam presisi dan skala default. Tentukan jenis kolom server SQL secara eksplisit yang dapat mengakomodasi semua nilai menggunakan 'HasColumnType()'.
Di PMC, masukkan perintah berikut:
Update-Database
Perintah
Update-Database
menjalankanUp
metode dalam migrasi yang belum diterapkan. Dalam hal ini, perintah menjalankanUp
metode dalamMigrations/<time-stamp>_InitialCreate.cs
file, yang membuat database.
Konteks RazorPagesMovieContext
data :
- Berasal dari Microsoft.EntityFrameworkCore.DbContext.
- Menentukan entitas mana yang disertakan dalam model data.
- EF Core Mengoordinasikan fungsionalitas, seperti Buat, Baca, Perbarui, dan Hapus, untuk model tersebut
Movie
.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
}
}
Kode sebelumnya membuat properti DbSet<Movie> untuk kumpulan entitas. Dalam terminologi Entity Framework, kumpulan entitas biasanya sesuai dengan tabel database. Entitas sesuai dengan baris dalam tabel.
Nama string koneksi diteruskan ke konteks dengan memanggil metode pada objek DbContextOptions. Untuk pengembangan lokal, sistem Konfigurasi membaca string koneksi dari appsettings.json
file.
Menguji aplikasi
Jalankan aplikasi dan tambahkan
/Movies
ke URL di browser (http://localhost:port/movies
).Jika Anda menerima kesalahan berikut:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Anda melewatkan langkah migrasi.
Uji tautan Buat Baru.
Catatan
Anda mungkin tidak dapat memasukkan koma desimal di
Price
bidang . Untuk mendukung validasi jQuery untuk lokal non-Bahasa Inggris yang menggunakan koma (",") untuk titik desimal dan untuk format tanggal non-Bahasa Inggris AS, aplikasi harus di globalisasi. Untuk instruksi globalisasi, lihat masalah GitHub ini.Uji tautan Edit, Detail, dan Hapus.
Tutorial berikutnya menjelaskan file yang dibuat oleh perancah.
Memeriksa konteks yang terdaftar dengan injeksi dependensi
ASP.NET Core dibangun dengan injeksi dependensi. Layanan, seperti EF Core konteks database, terdaftar dengan injeksi dependensi selama startup aplikasi. Komponen yang memerlukan layanan ini (seperti Razor Pages) disediakan melalui parameter konstruktor. Kode konstruktor yang mendapatkan instans konteks database ditampilkan nanti dalam tutorial.
Alat perancah secara otomatis membuat konteks database dan mendaftarkannya dengan kontainer injeksi dependensi. Kode yang disorot berikut ditambahkan ke Program.cs
file oleh perancah:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/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.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Pemecahan masalah dengan sampel yang telah selesai
Jika Anda mengalami masalah yang tidak dapat Anda atasi, bandingkan kode Anda dengan proyek yang telah selesai. Lihat atau unduh proyek yang selesai (cara mengunduh).
Langkah berikutnya
Dalam tutorial ini, kelas ditambahkan untuk mengelola film dalam database. Kelas model aplikasi menggunakan Entity Framework Core (EF Core) untuk bekerja dengan database. EF Core adalah pemeta relasional objek (O/RM) yang menyederhanakan akses data. Anda menulis kelas model terlebih dahulu, dan EF Core membuat database.
Kelas model dikenal sebagai kelas POCO (dari "P lain-O ld CLR Objects") karena mereka tidak memiliki dependensi pada EF Core. Mereka menentukan properti data yang disimpan dalam database.
Menambahkan model data
Di Penjelajah Solusi, klik kanan proyek >RazorPagesMovie Tambahkan>Folder Baru. Beri nama folder
Models
.Models
Klik kanan folder. Pilih Tambahkan>Kelas. Beri nama kelas Film.Tambahkan properti berikut ke
Movie
kelas :using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.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; } }
Kelas Movie
berisi:
Bidang
ID
diperlukan oleh database untuk kunci utama.Atribut [DataType] yang menentukan jenis data dalam
ReleaseDate
properti . Dengan atribut ini:- Pengguna tidak diharuskan memasukkan informasi waktu di bidang tanggal.
- Hanya tanggal yang ditampilkan, bukan informasi waktu.
Tanda tanya setelah
string
menunjukkan bahwa properti dapat diubah ke null. Untuk informasi selengkapnya, lihat Jenis nilai yang dapat diubah ke null.
DataAnnotations dibahas dalam tutorial selanjutnya.
Bangun proyek untuk memverifikasi tidak ada kesalahan kompilasi.
Perancah model film
Di bagian ini, model film di-scaffold. Artinya, alat perancah menghasilkan halaman untuk operasi Buat, Baca, Perbarui, dan Hapus (CRUD) untuk model film.
Buat folder Halaman/Film:
- Klik kanan pada folder >Halaman Tambahkan>Folder Baru.
- Beri nama folder Film.
Klik kanan pada folder> Halaman/Film Tambahkan>Item Perancah Baru.
Dalam dialog Tambahkan Perancah Baru, pilih Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD)>Tambahkan.
Selesaikan dialog Tambahkan Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD):
- Di menu drop-down Kelas model , pilih Film (RazorPagesMovie.Models).
- Di baris Kelas konteks data, pilih + tanda (plus).
- Dalam dialog Tambahkan Konteks Data, nama
RazorPagesMovie.Data.RazorPagesMovieContext
kelas dibuat. - Di menu drop-down Penyedia database, pilih SQL Server.
- Dalam dialog Tambahkan Konteks Data, nama
- Pilih Tambahkan.
File appsettings.json
diperbarui dengan string koneksi digunakan untuk menyambungkan ke database lokal.
Peringatan
Artikel ini menggunakan database lokal yang tidak mengharuskan pengguna untuk diautentikasi. Aplikasi produksi harus menggunakan alur autentikasi paling aman yang tersedia. Untuk informasi selengkapnya tentang autentikasi untuk aplikasi pengujian dan produksi yang disebarkan, lihat Mengamankan alur autentikasi.
File dibuat dan diperbarui
Proses perancah membuat file berikut:
- Halaman/Film: Buat, Hapus, Detail, Edit, dan Indeks.
Data/RazorPagesMovieContext.cs
File yang dibuat dijelaskan dalam tutorial berikutnya.
Proses perancah menambahkan kode yang disorot berikut ke Program.cs
file:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/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.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Perubahan Program.cs
dijelaskan nanti dalam tutorial ini.
Membuat skema database awal menggunakan fitur migrasi EF
Fitur migrasi di Entity Framework Core menyediakan cara untuk:
- Buat skema database awal.
- Perbarui skema database secara bertahap agar tetap sinkron dengan model data aplikasi. Data yang ada dalam database dipertahankan.
Di bagian ini, jendela Package Manager Console (PMC) digunakan untuk:
- Tambahkan migrasi awal.
- Perbarui database dengan migrasi awal.
Dari menu Alat, pilih Pengelola Paket NuGet>Konsol Pengelola Paket.
Di PMC, masukkan perintah berikut:
Add-Migration InitialCreate Update-Database
Perintah
Add-Migration
menghasilkan kode untuk membuat skema database awal. Skema didasarkan pada model yang ditentukan dalamDbContext
. ArgumenInitialCreate
digunakan untuk memberi nama migrasi. Nama apa pun dapat digunakan, tetapi menurut konvensi, nama dipilih yang menjelaskan migrasi.Perintah
Update-Database
menjalankanUp
metode dalam migrasi yang belum diterapkan. Dalam hal ini, perintah menjalankanUp
metode dalamMigrations/<time-stamp>_InitialCreate.cs
file, yang membuat database.
Peringatan berikut ditampilkan, yang ditangani di langkah selanjutnya:
Tidak ada jenis yang ditentukan untuk kolom desimal 'Harga' pada jenis entitas 'Film'. Ini akan menyebabkan nilai terpotong secara diam-diam jika tidak cocok dalam presisi dan skala default. Tentukan jenis kolom server SQL secara eksplisit yang dapat mengakomodasi semua nilai menggunakan 'HasColumnType()'.
Konteks RazorPagesMovieContext
data :
- Berasal dari Microsoft.EntityFrameworkCore.DbContext.
- Menentukan entitas mana yang disertakan dalam model data.
- EF Core Mengoordinasikan fungsionalitas, seperti Buat, Baca, Perbarui, dan Hapus, untuk model tersebut
Movie
.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
}
}
Kode sebelumnya membuat properti DbSet<Movie> untuk kumpulan entitas. Dalam terminologi Entity Framework, kumpulan entitas biasanya sesuai dengan tabel database. Entitas sesuai dengan baris dalam tabel.
Nama string koneksi diteruskan ke konteks dengan memanggil metode pada objek DbContextOptions. Untuk pengembangan lokal, sistem Konfigurasi membaca string koneksi dari appsettings.json
file.
Menguji aplikasi
Jalankan aplikasi dan tambahkan
/Movies
ke URL di browser (http://localhost:port/movies
).Jika Anda menerima kesalahan berikut:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Anda melewatkan langkah migrasi.
Uji tautan Buat Baru.
Catatan
Anda mungkin tidak dapat memasukkan koma desimal di
Price
bidang . Untuk mendukung validasi jQuery untuk lokal non-Bahasa Inggris yang menggunakan koma (",") untuk titik desimal dan untuk format tanggal non-Bahasa Inggris AS, aplikasi harus di globalisasi. Untuk instruksi globalisasi, lihat masalah GitHub ini.Uji tautan Edit, Detail, dan Hapus.
Tutorial berikutnya menjelaskan file yang dibuat oleh perancah.
Memeriksa konteks yang terdaftar dengan injeksi dependensi
ASP.NET Core dibangun dengan injeksi dependensi. Layanan, seperti EF Core konteks database, terdaftar dengan injeksi dependensi selama startup aplikasi. Komponen yang memerlukan layanan ini (seperti Razor Pages) disediakan melalui parameter konstruktor. Kode konstruktor yang mendapatkan instans konteks database ditampilkan nanti dalam tutorial.
Alat perancah secara otomatis membuat konteks database dan mendaftarkannya dengan kontainer injeksi dependensi. Kode yang disorot berikut ditambahkan ke Program.cs
file oleh perancah:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/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.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Pemecahan masalah dengan sampel yang telah selesai
Jika Anda mengalami masalah yang tidak dapat Anda atasi, bandingkan kode Anda dengan proyek yang telah selesai. Lihat atau unduh proyek yang selesai (cara mengunduh).
Langkah berikutnya
Dalam tutorial ini, kelas ditambahkan untuk mengelola film dalam database. Kelas model aplikasi menggunakan Entity Framework Core (EF Core) untuk bekerja dengan database. EF Core adalah pemeta relasional objek (O/RM) yang menyederhanakan akses data. Anda menulis kelas model terlebih dahulu, dan EF Core membuat database.
Kelas model dikenal sebagai kelas POCO (dari "P lain-O ld CLR Objects") karena mereka tidak memiliki dependensi pada EF Core. Mereka menentukan properti data yang disimpan dalam database.
Menambahkan model data
Di Penjelajah Solusi, klik kanan proyek >RazorPagesMovie Tambahkan>Folder Baru. Beri nama folder
Models
.Models
Klik kanan folder. Pilih Tambahkan>Kelas. Beri nama kelas Film.Tambahkan properti berikut ke
Movie
kelas :using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.Models { public class Movie { public int ID { get; set; } public string Title { get; set; } = string.Empty; [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; public decimal Price { get; set; } } }
Kelas Movie
berisi:
Bidang
ID
diperlukan oleh database untuk kunci utama.Atribut [DataType] yang menentukan jenis data dalam
ReleaseDate
properti . Dengan atribut ini:- Pengguna tidak diharuskan memasukkan informasi waktu di bidang tanggal.
- Hanya tanggal yang ditampilkan, bukan informasi waktu.
DataAnnotations dibahas dalam tutorial selanjutnya.
Bangun proyek untuk memverifikasi tidak ada kesalahan kompilasi.
Perancah model film
Di bagian ini, model film di-scaffold. Artinya, alat perancah menghasilkan halaman untuk operasi Buat, Baca, Perbarui, dan Hapus (CRUD) untuk model film.
Tambahkan paket
Microsoft.EntityFrameworkCore.Design
NuGet , yang diperlukan untuk alat perancah.- Dari menu Alat, pilih Pengelola>Paket NuGet Kelola Paket NuGet untuk Solusi
- Pilih tab Telusuri.
- Masukkan
Microsoft.EntityFrameworkCore.Design
dan pilih dari daftar. - Periksa Proyek lalu Pilih Instal
- Pilih Saya Terima dalam dialog Penerimaan Lisensi.
Buat folder Halaman/Film:
- Klik kanan pada folder >Halaman Tambahkan>Folder Baru.
- Beri nama folder Film.
Klik kanan pada folder> Halaman/Film Tambahkan>Item Perancah Baru.
Dalam dialog Tambahkan Perancah Baru, pilih Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD)>Tambahkan.
Selesaikan dialog Tambahkan Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD):
- Di menu drop-down Kelas model , pilih Film (RazorPagesMovie.Models).
- Di baris Kelas konteks data, pilih + tanda (plus).
- Dalam dialog Tambahkan Konteks Data, nama
RazorPagesMovie.Data.RazorPagesMovieContext
kelas dibuat.
- Dalam dialog Tambahkan Konteks Data, nama
- Pilih Tambahkan.
Jika Anda mendapatkan pesan kesalahan yang mengatakan Bahwa Anda perlu menginstal
Microsoft.EntityFrameworkCore.SqlServer
paket, ulangi langkah-langkah yang dimulai dengan Tambahkan>Item Perancah Baru.
File appsettings.json
diperbarui dengan string koneksi digunakan untuk menyambungkan ke database lokal.
Peringatan
Artikel ini menggunakan database lokal yang tidak mengharuskan pengguna untuk diautentikasi. Aplikasi produksi harus menggunakan alur autentikasi paling aman yang tersedia. Untuk informasi selengkapnya tentang autentikasi untuk aplikasi pengujian dan produksi yang disebarkan, lihat Mengamankan alur autentikasi.
File dibuat dan diperbarui
Proses perancah membuat file berikut:
- Halaman/Film: Buat, Hapus, Detail, Edit, dan Indeks.
Data/RazorPagesMovieContext.cs
File yang dibuat dijelaskan dalam tutorial berikutnya.
Proses perancah menambahkan kode yang disorot berikut ke Program.cs
file:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/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.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Perubahan Program.cs
dijelaskan nanti dalam tutorial ini.
Membuat skema database awal menggunakan fitur migrasi EF
Fitur migrasi di Entity Framework Core menyediakan cara untuk:
- Buat skema database awal.
- Perbarui skema database secara bertahap agar tetap sinkron dengan model data aplikasi. Data yang ada dalam database dipertahankan.
Di bagian ini, jendela Package Manager Console (PMC) digunakan untuk:
- Tambahkan migrasi awal.
- Perbarui database dengan migrasi awal.
Dari menu Alat, pilih Pengelola Paket NuGet>Konsol Pengelola Paket.
Di PMC, masukkan perintah berikut:
Add-Migration InitialCreate Update-Database
Perintah sebelumnya menginstal alat Entity Framework Core dan menjalankan migrations
perintah untuk menghasilkan kode yang membuat skema database awal.
Peringatan berikut ditampilkan, yang ditangani di langkah selanjutnya:
Tidak ada jenis yang ditentukan untuk kolom desimal 'Harga' pada jenis entitas 'Film'. Ini akan menyebabkan nilai terpotong secara diam-diam jika tidak cocok dalam presisi dan skala default. Tentukan jenis kolom server SQL secara eksplisit yang dapat mengakomodasi semua nilai menggunakan 'HasColumnType()'.
Perintah migrations
menghasilkan kode untuk membuat skema database awal. Skema didasarkan pada model yang ditentukan dalam DbContext
. Argumen InitialCreate
digunakan untuk memberi nama migrasi. Nama apa pun dapat digunakan, tetapi menurut konvensi, nama dipilih yang menjelaskan migrasi.
Perintah update
menjalankan Up
metode dalam migrasi yang belum diterapkan. Dalam hal ini, update
menjalankan Up
metode dalam Migrations/<time-stamp>_InitialCreate.cs
file, yang membuat database.
Memeriksa konteks yang terdaftar dengan injeksi dependensi
ASP.NET Core dibangun dengan injeksi dependensi. Layanan, seperti EF Core konteks database, terdaftar dengan injeksi dependensi selama startup aplikasi. Komponen yang memerlukan layanan ini (seperti Razor Pages) disediakan melalui parameter konstruktor. Kode konstruktor yang mendapatkan instans konteks database ditampilkan nanti dalam tutorial.
Alat perancah secara otomatis membuat konteks database dan mendaftarkannya dengan kontainer injeksi dependensi. Kode yang disorot berikut ditambahkan ke Program.cs
file oleh perancah:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/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.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Konteks RazorPagesMovieContext
data :
- Berasal dari Microsoft.EntityFrameworkCore.DbContext.
- Menentukan entitas mana yang disertakan dalam model data.
- EF Core Mengoordinasikan fungsionalitas, seperti Buat, Baca, Perbarui, dan Hapus, untuk model tersebut
Movie
.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie>? Movie { get; set; }
}
}
Kode sebelumnya membuat properti DbSet<Movie> untuk kumpulan entitas. Dalam terminologi Entity Framework, kumpulan entitas biasanya sesuai dengan tabel database. Entitas sesuai dengan baris dalam tabel.
Nama string koneksi diteruskan ke konteks dengan memanggil metode pada objek DbContextOptions. Untuk pengembangan lokal, sistem Konfigurasi membaca string koneksi dari appsettings.json
file.
Menguji aplikasi
Jalankan aplikasi dan tambahkan
/Movies
ke URL di browser (http://localhost:port/movies
).Jika Anda menerima kesalahan berikut:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Anda melewatkan langkah migrasi.
Uji tautan Buat Baru.
Catatan
Anda mungkin tidak dapat memasukkan koma desimal di
Price
bidang . Untuk mendukung validasi jQuery untuk lokal non-Bahasa Inggris yang menggunakan koma (",") untuk titik desimal dan untuk format tanggal non-Bahasa Inggris AS, aplikasi harus di globalisasi. Untuk instruksi globalisasi, lihat masalah GitHub ini.Uji tautan Edit, Detail, dan Hapus.
Tutorial berikutnya menjelaskan file yang dibuat oleh perancah.
Pemecahan masalah dengan sampel yang telah selesai
Jika Anda mengalami masalah yang tidak dapat Anda atasi, bandingkan kode Anda dengan proyek yang telah selesai. Lihat atau unduh proyek yang selesai (cara mengunduh).
Langkah berikutnya
Di bagian ini, kelas ditambahkan untuk mengelola film dalam database. Kelas model aplikasi menggunakan Entity Framework Core (EF Core) untuk bekerja dengan database. EF Core adalah pemeta relasional objek (O/RM) yang menyederhanakan akses data. Anda menulis kelas model terlebih dahulu, dan EF Core membuat database.
Kelas model dikenal sebagai kelas POCO (dari "P lain-O ld CLR Objects") karena mereka tidak memiliki dependensi pada EF Core. Mereka menentukan properti data yang disimpan dalam database.
Lihat atau unduh sampel kode (cara mengunduh).
Menambahkan model data
Di Penjelajah Solusi, klik kanan proyek >RazorPagesMovie Tambahkan>Folder Baru. Beri nama folder
Models
.Models
Klik kanan folder. Pilih Tambahkan>Kelas. Beri nama kelas Film.Tambahkan properti berikut ke
Movie
kelas :using System; using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.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; } } }
Kelas Movie
berisi:
Bidang
ID
diperlukan oleh database untuk kunci utama.[DataType(DataType.Date)]
: Atribut [DataType] menentukan jenis data (Date
). Dengan atribut ini:- Pengguna tidak diharuskan memasukkan informasi waktu di bidang tanggal.
- Hanya tanggal yang ditampilkan, bukan informasi waktu.
DataAnnotations dibahas dalam tutorial selanjutnya.
Bangun proyek untuk memverifikasi tidak ada kesalahan kompilasi.
Perancah model film
Di bagian ini, model film di-scaffold. Artinya, alat perancah menghasilkan halaman untuk operasi Buat, Baca, Perbarui, dan Hapus (CRUD) untuk model film.
Buat folder Halaman/Film :
- Klik kanan pada folder >Halaman Tambahkan>Folder Baru.
- Beri nama folder Film.
Klik kanan pada folder> Halaman/Film Tambahkan>Item Perancah Baru.
Dalam dialog Tambahkan Perancah, pilih Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD)>Tambahkan.
Selesaikan dialog Tambahkan Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD):
- Di menu drop-down Kelas model , pilih Film (RazorPagesMovie.Models).
- Di baris Kelas konteks data, pilih + tanda (plus).
- Dalam dialog Tambahkan Konteks Data, nama
RazorPagesMovie.Data.RazorPagesMovieContext
kelas dibuat.
- Dalam dialog Tambahkan Konteks Data, nama
- Pilih Tambahkan.
File appsettings.json
diperbarui dengan string koneksi digunakan untuk menyambungkan ke database lokal.
Peringatan
Artikel ini menggunakan database lokal yang tidak mengharuskan pengguna untuk diautentikasi. Aplikasi produksi harus menggunakan alur autentikasi paling aman yang tersedia. Untuk informasi selengkapnya tentang autentikasi untuk aplikasi pengujian dan produksi yang disebarkan, lihat Mengamankan alur autentikasi.
File dibuat dan diperbarui
Proses perancah membuat file berikut:
- Halaman/Film: Buat, Hapus, Detail, Edit, dan Indeks.
Data/RazorPagesMovieContext.cs
File yang diperbarui
Startup.cs
File yang dibuat dan diperbarui dijelaskan di bagian berikutnya.
Membuat skema database awal menggunakan fitur migrasi EF
Fitur migrasi di Entity Framework Core menyediakan cara untuk:
- Buat skema database awal.
- Perbarui skema database secara bertahap agar tetap sinkron dengan model data aplikasi. Data yang ada dalam database dipertahankan.
Di bagian ini, jendela Package Manager Console (PMC) digunakan untuk:
- Tambahkan migrasi awal.
- Perbarui database dengan migrasi awal.
Dari menu Alat, pilih Pengelola Paket NuGet>Konsol Pengelola Paket.
Di PMC, masukkan perintah berikut:
Add-Migration InitialCreate Update-Database
Untuk SQL Server, perintah sebelumnya menghasilkan peringatan berikut: "Tidak ada jenis yang ditentukan untuk kolom desimal 'Harga' pada jenis entitas 'Film'. Ini akan menyebabkan nilai terpotong secara diam-diam jika tidak cocok dalam presisi dan skala default. Tentukan jenis kolom server SQL secara eksplisit yang dapat mengakomodasi semua nilai menggunakan 'HasColumnType()'."
Abaikan peringatan, karena akan ditangani di langkah selanjutnya.
Perintah migrations
menghasilkan kode untuk membuat skema database awal. Skema didasarkan pada model yang ditentukan dalam DbContext
. Argumen InitialCreate
digunakan untuk memberi nama migrasi. Nama apa pun dapat digunakan, tetapi menurut konvensi, nama dipilih yang menjelaskan migrasi.
Perintah update
menjalankan Up
metode dalam migrasi yang belum diterapkan. Dalam hal ini, update
menjalankan Up
metode dalam Migrations/<time-stamp>_InitialCreate.cs
file, yang membuat database.
Memeriksa konteks yang terdaftar dengan injeksi dependensi
ASP.NET Core dibangun dengan injeksi dependensi. Layanan, seperti EF Core konteks database, terdaftar dengan injeksi dependensi selama startup aplikasi. Komponen yang memerlukan layanan ini (seperti Razor Pages) disediakan melalui parameter konstruktor. Kode konstruktor yang mendapatkan instans konteks database ditampilkan nanti dalam tutorial.
Alat perancah secara otomatis membuat konteks database dan mendaftarkannya dengan kontainer injeksi dependensi.
Periksa metode Startup.ConfigureServices
. Garis yang disorot ditambahkan oleh perancah:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Fungsionalitas RazorPagesMovieContext
koordinatEF Core, seperti Buat, Baca, Perbarui, dan Hapus, untuk model.Movie
Konteks data (RazorPagesMovieContext
) berasal dari Microsoft.EntityFrameworkCore.DbContext. Konteks data menentukan entitas mana yang disertakan dalam model data.
using Microsoft.EntityFrameworkCore;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (
DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
}
}
Kode sebelumnya membuat properti DbSet<Movie> untuk kumpulan entitas. Dalam terminologi Entity Framework, kumpulan entitas biasanya sesuai dengan tabel database. Entitas sesuai dengan baris dalam tabel.
Nama string koneksi diteruskan ke konteks dengan memanggil metode pada objek DbContextOptions. Untuk pengembangan lokal, sistem Konfigurasi membaca string koneksi dari appsettings.json
file.
Menguji aplikasi
Jalankan aplikasi dan tambahkan
/Movies
ke URL di browser (http://localhost:port/movies
).Jika Anda menerima kesalahan berikut:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Anda melewatkan langkah migrasi.
Uji tautan Buat.
Catatan
Anda mungkin tidak dapat memasukkan koma desimal di
Price
bidang . Untuk mendukung validasi jQuery untuk lokal non-Bahasa Inggris yang menggunakan koma (",") untuk titik desimal dan untuk format tanggal non-Bahasa Inggris AS, aplikasi harus di globalisasi. Untuk instruksi globalisasi, lihat masalah GitHub ini.Uji tautan Edit, Detail, dan Hapus.
Pengelogan SQL Core Kerangka Kerja Entitas
Konfigurasi pengelogan biasanya disediakan oleh bagian Logging
dari file appsettings.{Environment}.json
. Untuk mencatat pernyataan SQL, tambahkan "Microsoft.EntityFrameworkCore.Database.Command": "Information"
ke appsettings.Development.json
file:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDB-2;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
,"Microsoft.EntityFrameworkCore.Database.Command": "Information"
}
},
"AllowedHosts": "*"
}
Dengan JSON sebelumnya, pernyataan SQL ditampilkan pada baris perintah dan di jendela output Visual Studio.
Untuk informasi selengkapnya, lihat Pengelogan di .NET Core dan ASP.NET Core dan masalah GitHub ini.
Tutorial berikutnya menjelaskan file yang dibuat oleh perancah.
Langkah berikutnya
Di bagian ini, kelas ditambahkan untuk mengelola film. Kelas model aplikasi menggunakan Entity Framework Core (EF Core) untuk bekerja dengan database. EF Core adalah pemeta relasional objek (O/RM) yang menyederhanakan akses data.
Kelas model dikenal sebagai kelas POCO (dari "objek CLR biasa") karena tidak memiliki dependensi pada EF Core. Mereka menentukan properti data yang disimpan dalam database.
Lihat atau unduh sampel kode (cara mengunduh).
Peringatan
Artikel ini menggunakan database lokal yang tidak mengharuskan pengguna untuk diautentikasi. Aplikasi produksi harus menggunakan alur autentikasi paling aman yang tersedia. Untuk informasi selengkapnya tentang autentikasi untuk aplikasi pengujian dan produksi yang disebarkan, lihat Mengamankan alur autentikasi.
Menambahkan model data
Klik kanan proyek> RazorPagesMovie Tambahkan>Folder Baru. Beri nama folder Models
.
Models
Klik kanan folder. Pilih Tambahkan>Kelas. Beri nama kelas Film.
Tambahkan properti berikut ke Movie
kelas :
using System;
using System.ComponentModel.DataAnnotations;
namespace RazorPagesMovie.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; }
}
}
Kelas Movie
berisi:
Bidang
ID
diperlukan oleh database untuk kunci utama.[DataType(DataType.Date)]
: Atribut DataType menentukan jenis data (Date
). Dengan atribut ini:- Pengguna tidak diharuskan memasukkan informasi waktu di bidang tanggal.
- Hanya tanggal yang ditampilkan, bukan informasi waktu.
DataAnnotations dibahas dalam tutorial selanjutnya.
DataAnnotations dibahas dalam tutorial selanjutnya.
Bangun proyek untuk memverifikasi tidak ada kesalahan kompilasi.
Perancah model film
Di bagian ini, model film di-scaffold. Artinya, alat perancah menghasilkan halaman untuk operasi Buat, Baca, Perbarui, dan Hapus (CRUD) untuk model film.
Buat folder Halaman/Film :
- Klik kanan pada folder >Halaman Tambahkan>Folder Baru.
- Beri nama folder Film.
Klik kanan pada folder> Halaman/Film Tambahkan>Item Perancah Baru.
Dalam dialog Tambahkan Perancah, pilih Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD)>Tambahkan.
Selesaikan dialog Tambahkan Razor Halaman menggunakan Kerangka Kerja Entitas (CRUD):
- Di menu drop-down Kelas model , pilih Film (RazorPagesMovie.Models).
- Di baris Kelas konteks data, pilih + tanda (plus) dan ubah nama yang dihasilkan dari RazorPagesMovie.
Models
. RazorPagesMovieContext ke RazorPagesMovie.Data. RazorPagesMovieContext. Perubahan ini tidak diperlukan. Ini membuat kelas konteks database dengan namespace yang benar. - Pilih Tambahkan.
File appsettings.json
diperbarui dengan string koneksi digunakan untuk menyambungkan ke database lokal.
File dibuat
Proses perancah membuat dan memperbarui file berikut:
- Halaman/Film: Buat, Hapus, Detail, Edit, dan Indeks.
Data/RazorPagesMovieContext.cs
Diperbarui
Startup.cs
File yang dibuat dan diperbarui dijelaskan di bagian berikutnya.
Migrasi awal
Di bagian ini, Package Manager Console (PMC) digunakan untuk:
- Tambahkan migrasi awal.
- Perbarui database dengan migrasi awal.
Dari menu Alat, pilih Pengelola Paket NuGet>Konsol Pengelola Paket.
Di PMC, masukkan perintah berikut:
Add-Migration InitialCreate
Update-Database
Perintah sebelumnya menghasilkan peringatan berikut: "Tidak ada jenis yang ditentukan untuk kolom desimal 'Harga' pada jenis entitas 'Film'. Ini akan menyebabkan nilai terpotong secara diam-diam jika tidak cocok dalam presisi dan skala default. Tentukan jenis kolom server SQL secara eksplisit yang dapat mengakomodasi semua nilai menggunakan 'HasColumnType()'."
Abaikan peringatan, karena akan ditangani di langkah selanjutnya.
Perintah migrasi menghasilkan kode untuk membuat skema database awal. Skema didasarkan pada model yang ditentukan dalam DbContext
. Argumen InitialCreate
digunakan untuk memberi nama migrasi. Nama apa pun dapat digunakan, tetapi menurut konvensi, nama dipilih yang menjelaskan migrasi.
Perintah update
menjalankan Up
metode dalam migrasi yang belum diterapkan. Dalam hal ini, update
menjalankan Up
metode dalam Migrations/<time-stamp>_InitialCreate.cs
file, yang membuat database.
Memeriksa konteks yang terdaftar dengan injeksi dependensi
ASP.NET Core dibangun dengan injeksi dependensi. Layanan, seperti EF Core konteks database, terdaftar dengan injeksi dependensi selama startup aplikasi. Komponen yang memerlukan layanan ini, seperti Razor Pages, disediakan melalui parameter konstruktor. Kode konstruktor yang mendapatkan instans konteks database ditampilkan nanti dalam tutorial.
Alat perancah secara otomatis membuat konteks database dan mendaftarkannya dengan kontainer injeksi dependensi.
Periksa metode Startup.ConfigureServices
. Garis yang disorot ditambahkan oleh perancah:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Fungsionalitas RazorPagesMovieContext
koordinatEF Core, seperti Buat, Baca, Perbarui, dan Hapus, untuk model.Movie
Konteks data (RazorPagesMovieContext
) berasal dari Microsoft.EntityFrameworkCore.DbContext. Konteks data menentukan entitas mana yang disertakan dalam model data.
using Microsoft.EntityFrameworkCore;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (
DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
}
}
Kode sebelumnya membuat properti DbSet<Movie> untuk kumpulan entitas. Dalam terminologi Entity Framework, kumpulan entitas biasanya sesuai dengan tabel database. Entitas sesuai dengan baris dalam tabel.
Nama string koneksi diteruskan ke konteks dengan memanggil metode pada objek DbContextOptions. Untuk pengembangan lokal, sistem Konfigurasi membaca string koneksi dari appsettings.json
file.
Menguji aplikasi
- Jalankan aplikasi dan tambahkan
/Movies
ke URL di browser (http://localhost:port/movies
).
Jika Anda mendapatkan kesalahan:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.
Anda melewatkan langkah migrasi.
Uji tautan Buat.
Catatan
Anda mungkin tidak dapat memasukkan koma desimal di
Price
bidang . Untuk mendukung validasi jQuery untuk lokal non-Bahasa Inggris yang menggunakan koma (",") untuk titik desimal dan untuk format tanggal non-Bahasa Inggris AS, aplikasi harus di globalisasi. Untuk instruksi globalisasi, lihat masalah GitHub ini.Uji tautan Edit, Detail, dan Hapus.
Tutorial berikutnya menjelaskan file yang dibuat oleh perancah.
Langkah berikutnya
ASP.NET Core