Bagian 4 dari seri tutorial di Razor Pages
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.
Oleh Joe Audette
Objek RazorPagesMovieContext
menangani tugas menyambungkan ke database dan memetakan Movie
objek ke rekaman database. Konteks database terdaftar dengan kontainer Injeksi Dependensi di Program.cs
:
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.")));
Sistem Konfigurasi Inti ASP.NET membaca kunci.ConnectionString
Untuk pengembangan lokal, konfigurasi mendapatkan string koneksi dari appsettings.json
file.
string koneksi yang dihasilkan mirip dengan JSON berikut:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-f2e0482c-952d-4b1c-afe9-a1a3dfe52e55;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
LocalDB SQL Server Express
LocalDB adalah versi ringan dari mesin database SQL Server Express yang ditargetkan untuk pengembangan program. LocalDB dimulai sesuai permintaan dan berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks. Secara default, database LocalDB membuat *.mdf
file di C:\Users\<user>\
direktori.
Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).
Klik kanan pada
Movie
tabel dan pilih Tampilkan Perancang:Perhatikan ikon kunci di samping
ID
. Secara default, EF membuat properti bernamaID
untuk kunci utama.Klik kanan pada
Movie
tabel dan pilih Tampilkan Data:
Seed database
Buat kelas baru bernama SeedData
di folder Model dengan kode berikut:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
Jika ada film dalam database, penginisialisasi benih akan kembali dan tidak ada film yang ditambahkan.
if (context.Movie.Any())
{
return;
}
Menambahkan penginisialisasi benih
Program.cs
Perbarui dengan kode yang disorot berikut:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages();
app.Run();
Dalam kode sebelumnya, Program.cs
telah dimodifikasi untuk melakukan hal berikut:
- Dapatkan instans konteks database dari kontainer injeksi dependensi (DI).
seedData.Initialize
Panggil metode , teruskan ke dalamnya instans konteks database.- Buang konteks ketika metode benih selesai. Pernyataan penggunaan memastikan konteks dibuang.
Pengecualian berikut terjadi ketika Update-Database
belum dijalankan:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Menguji aplikasi
Hapus semua rekaman dalam database sehingga metode seed akan berjalan. Hentikan dan mulai aplikasi untuk menyemai database. Jika database tidak diunggulkan, letakkan titik henti if (context.Movie.Any())
dan telusuri kode.
Aplikasi ini menunjukkan data seeded:
Langkah berikutnya
Objek RazorPagesMovieContext
menangani tugas menyambungkan ke database dan memetakan Movie
objek ke rekaman database. Konteks database terdaftar dengan kontainer Injeksi Dependensi di Program.cs
:
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();
Sistem Konfigurasi Inti ASP.NET membaca kunci.ConnectionString
Untuk pengembangan lokal, konfigurasi mendapatkan string koneksi dari appsettings.json
file.
string koneksi yang dihasilkan mirip dengan JSON berikut:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
LocalDB SQL Server Express
LocalDB adalah versi ringan dari mesin database SQL Server Express yang ditargetkan untuk pengembangan program. LocalDB dimulai sesuai permintaan dan berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks. Secara default, database LocalDB membuat *.mdf
file di C:\Users\<user>\
direktori.
Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).
Klik kanan pada
Movie
tabel dan pilih Tampilkan Perancang:Perhatikan ikon kunci di samping
ID
. Secara default, EF membuat properti bernamaID
untuk kunci utama.Klik kanan pada
Movie
tabel dan pilih Tampilkan Data:
Seed database
Buat kelas baru bernama SeedData
di folder Model dengan kode berikut:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
Jika ada film dalam database, penginisialisasi benih akan kembali dan tidak ada film yang ditambahkan.
if (context.Movie.Any())
{
return;
}
Menambahkan penginisialisasi benih
Program.cs
Perbarui dengan kode yang disorot berikut:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Dalam kode sebelumnya, Program.cs
telah dimodifikasi untuk melakukan hal berikut:
- Dapatkan instans konteks database dari kontainer injeksi dependensi (DI).
seedData.Initialize
Panggil metode , teruskan ke dalamnya instans konteks database.- Buang konteks ketika metode benih selesai. Pernyataan penggunaan memastikan konteks dibuang.
Pengecualian berikut terjadi ketika Update-Database
belum dijalankan:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Menguji aplikasi
Hapus semua rekaman dalam database sehingga metode seed akan berjalan. Hentikan dan mulai aplikasi untuk menyemai database. Jika database tidak diunggulkan, letakkan titik henti if (context.Movie.Any())
dan telusuri kode.
Aplikasi ini menunjukkan data seeded:
Langkah berikutnya
Objek RazorPagesMovieContext
menangani tugas menyambungkan ke database dan memetakan Movie
objek ke rekaman database. Konteks database terdaftar dengan kontainer Injeksi Dependensi di Program.cs
:
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();
Sistem Konfigurasi Inti ASP.NET membaca kunci.ConnectionString
Untuk pengembangan lokal, konfigurasi mendapatkan string koneksi dari appsettings.json
file.
string koneksi yang dihasilkan mirip dengan JSON berikut:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
LocalDB SQL Server Express
LocalDB adalah versi ringan dari mesin database SQL Server Express yang ditargetkan untuk pengembangan program. LocalDB dimulai sesuai permintaan dan berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks. Secara default, database LocalDB membuat *.mdf
file di C:\Users\<user>\
direktori.
Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).
Klik kanan pada
Movie
tabel dan pilih Tampilkan Perancang:Perhatikan ikon kunci di samping
ID
. Secara default, EF membuat properti bernamaID
untuk kunci utama.Klik kanan pada
Movie
tabel dan pilih Tampilkan Data:
Seed database
Buat kelas baru bernama SeedData
di folder Model dengan kode berikut:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
Jika ada film dalam database, penginisialisasi benih akan kembali dan tidak ada film yang ditambahkan.
if (context.Movie.Any())
{
return;
}
Menambahkan penginisialisasi benih
Program.cs
Perbarui dengan kode yang disorot berikut:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Dalam kode sebelumnya, Program.cs
telah dimodifikasi untuk melakukan hal berikut:
- Dapatkan instans konteks database dari kontainer injeksi dependensi (DI).
seedData.Initialize
Panggil metode , teruskan ke dalamnya instans konteks database.- Buang konteks ketika metode benih selesai. Pernyataan penggunaan memastikan konteks dibuang.
Pengecualian berikut terjadi ketika Update-Database
belum dijalankan:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Menguji aplikasi
Hapus semua rekaman dalam database sehingga metode seed akan berjalan. Hentikan dan mulai aplikasi untuk menyemai database. Jika database tidak diunggulkan, letakkan titik henti if (context.Movie.Any())
dan telusuri kode.
Aplikasi ini menunjukkan data seeded:
Langkah berikutnya
Objek RazorPagesMovieContext
menangani tugas menyambungkan ke database dan memetakan Movie
objek ke rekaman database. Konteks database terdaftar dengan kontainer Injeksi Dependensi di Program.cs
:
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();
Sistem Konfigurasi Inti ASP.NET membaca kunci.ConnectionString
Untuk pengembangan lokal, konfigurasi mendapatkan string koneksi dari appsettings.json
file.
string koneksi yang dihasilkan mirip dengan JSON berikut:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
LocalDB SQL Server Express
LocalDB adalah versi ringan dari mesin database SQL Server Express yang ditargetkan untuk pengembangan program. LocalDB dimulai sesuai permintaan dan berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks. Secara default, database LocalDB membuat *.mdf
file di C:\Users\<user>\
direktori.
Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).
Klik kanan pada
Movie
tabel dan pilih Tampilkan Perancang:Perhatikan ikon kunci di samping
ID
. Secara default, EF membuat properti bernamaID
untuk kunci utama.Klik kanan pada
Movie
tabel dan pilih Tampilkan Data:
Seed database
Buat kelas baru bernama SeedData
di folder Model dengan kode berikut:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
Jika ada film dalam database, penginisialisasi benih akan kembali dan tidak ada film yang ditambahkan.
if (context.Movie.Any())
{
return;
}
Menambahkan penginisialisasi benih
Program.cs
Perbarui dengan kode yang disorot berikut:
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Dalam kode sebelumnya, Program.cs
telah dimodifikasi untuk melakukan hal berikut:
- Dapatkan instans konteks database dari kontainer injeksi dependensi (DI).
seedData.Initialize
Panggil metode , teruskan ke dalamnya instans konteks database.- Buang konteks ketika metode benih selesai. Pernyataan penggunaan memastikan konteks dibuang.
Pengecualian berikut terjadi ketika Update-Database
belum dijalankan:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Menguji aplikasi
Hapus semua rekaman dalam database sehingga metode seed akan berjalan. Hentikan dan mulai aplikasi untuk menyemai database. Jika database tidak diunggulkan, letakkan titik henti if (context.Movie.Any())
dan telusuri kode.
Aplikasi ini menunjukkan data seeded:
Langkah berikutnya
Lihat atau unduh sampel kode (cara mengunduh).
Objek RazorPagesMovieContext
menangani tugas menyambungkan ke database dan memetakan Movie
objek ke rekaman database. Konteks database terdaftar dengan kontainer Injeksi Dependensi dalam ConfigureServices
metode di Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Sistem Konfigurasi Inti ASP.NET membaca kunci.ConnectionString
Untuk pengembangan lokal, konfigurasi mendapatkan string koneksi dari appsettings.json
file.
string koneksi yang dihasilkan mirip dengan JSON berikut:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
LocalDB SQL Server Express
LocalDB adalah versi ringan dari mesin database SQL Server Express yang ditargetkan untuk pengembangan program. LocalDB dimulai sesuai permintaan dan berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks. Secara default, database LocalDB membuat *.mdf
file di C:\Users\<user>\
direktori.
Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).
Klik kanan pada
Movie
tabel dan pilih Tampilkan Perancang:Perhatikan ikon kunci di samping
ID
. Secara default, EF membuat properti bernamaID
untuk kunci utama.Klik kanan pada
Movie
tabel dan pilih Tampilkan Data:
Seed database
Buat kelas baru bernama SeedData
di folder Model dengan kode berikut:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
using System;
using System.Linq;
namespace RazorPagesMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
Jika ada film dalam database, penginisialisasi benih akan kembali dan tidak ada film yang ditambahkan.
if (context.Movie.Any())
{
return;
}
Menambahkan penginisialisasi benih
Ganti konten Program.cs
dengan kode berikut:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using RazorPagesMovie.Models;
using System;
namespace RazorPagesMovie
{
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
Dalam kode sebelumnya, Main
metode telah dimodifikasi untuk melakukan hal berikut:
- Dapatkan instans konteks database dari kontainer injeksi dependensi.
seedData.Initialize
Panggil metode , teruskan ke dalamnya instans konteks database.- Buang konteks ketika metode benih selesai. Pernyataan penggunaan memastikan konteks dibuang.
Pengecualian berikut terjadi ketika Update-Database
belum dijalankan:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Menguji aplikasi
Hapus semua rekaman dalam database. Menggunakan tautan hapus di browser atau dari SSOX
Paksa aplikasi untuk menginisialisasi dengan memanggil metode di
Startup
kelas, sehingga metode seed berjalan. Untuk memaksa inisialisasi, IIS Express harus dihentikan dan dimulai ulang. Hentikan dan mulai ulang IIS dengan salah satu pendekatan berikut:Klik kanan ikon baki sistem IIS Express di area pemberitahuan dan pilih Keluar atau Hentikan Situs:
Jika aplikasi berjalan dalam mode non-debug, tekan F5 untuk berjalan dalam mode debug.
Jika aplikasi dalam mode debug, hentikan debugger dan tekan F5.
Aplikasi ini menunjukkan data seeded:
Langkah berikutnya
Lihat atau unduh sampel kode (cara mengunduh).
Objek RazorPagesMovieContext
menangani tugas menyambungkan ke database dan memetakan Movie
objek ke rekaman database. Konteks database terdaftar dengan kontainer Injeksi Dependensi dalam ConfigureServices
metode di Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Sistem Konfigurasi Inti ASP.NET membaca kunci.ConnectionString
Untuk pengembangan lokal, konfigurasi mendapatkan string koneksi dari appsettings.json
file.
string koneksi yang dihasilkan akan mirip dengan yang berikut ini:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
LocalDB SQL Server Express
LocalDB adalah versi ringan dari mesin database SQL Server Express yang ditargetkan untuk pengembangan program. LocalDB dimulai sesuai permintaan dan berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks. Secara default, database LocalDB membuat *.mdf
file di C:\Users\<user>\
direktori.
Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).
Klik kanan pada
Movie
tabel dan pilih Tampilkan Perancang:
Perhatikan ikon kunci di samping ID
. Secara default, EF membuat properti bernama ID
untuk kunci utama.
Klik kanan pada
Movie
tabel dan pilih Tampilkan Data:
Seed database
Buat kelas baru bernama SeedData
di folder Model dengan kode berikut:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
using System;
using System.Linq;
namespace RazorPagesMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
Jika ada film dalam database, penginisialisasi benih akan kembali dan tidak ada film yang ditambahkan.
if (context.Movie.Any())
{
return;
}
Menambahkan penginisialisasi benih
Ganti konten Program.cs
dengan kode berikut:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using RazorPagesMovie.Models;
using System;
namespace RazorPagesMovie
{
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
Dalam kode sebelumnya, Main
metode telah dimodifikasi untuk melakukan hal berikut:
- Dapatkan instans konteks database dari kontainer injeksi dependensi.
seedData.Initialize
Panggil metode , teruskan ke dalamnya instans konteks database.- Buang konteks ketika metode benih selesai. Pernyataan penggunaan memastikan konteks dibuang.
Pengecualian berikut terjadi ketika Update-Database
belum dijalankan:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Menguji aplikasi
Hapus semua rekaman dalam database. Gunakan tautan hapus di browser atau dari SSOX.
Paksa aplikasi untuk menginisialisasi dengan memanggil metode di
Startup
kelas, sehingga metode seed berjalan. Untuk memaksa inisialisasi, IIS Express harus dihentikan dan dimulai ulang. Hentikan dan mulai ulang IIS dengan salah satu pendekatan berikut:Klik kanan ikon baki sistem IIS Express di area pemberitahuan dan ketuk Keluar atau Hentikan Situs:
- Jika aplikasi berjalan dalam mode non-debug, tekan F5 untuk berjalan dalam mode debug.
- Jika aplikasi dalam mode debug, hentikan debugger dan tekan F5.
Aplikasi ini menunjukkan data seeded:
Langkah berikutnya
ASP.NET Core