Bagikan melalui


Bagian 5, bekerja dengan database di aplikasi MVC Inti ASP.NET

Catatan

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 10 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 9 dari artikel ini.

Oleh Rick Anderson dan Jon P Smith.

Pendahuluan

Bagian seri tutorial ini berfokus pada bekerja dengan database SQL di aplikasi MVC Core ASP.NET Anda.

Anda akan mempelajari cara:

  • Daftarkan dan konfigurasikan konteks database Entity Framework Core untuk aplikasi MVC Core ASP.NET Anda.
  • Bekerja dengan string koneksi database untuk pengembangan lokal.
  • Gunakan SQL Server Express LocalDB untuk pengembangan dan memeriksa database dan data Anda menggunakan SQL Server Object Explorer.
  • Isi database Anda dengan data contoh awal.

Prasyarat

Tutorial ini menggunakan database yang Anda siapkan di langkah sebelumnya: Bagian 4, tambahkan model ke aplikasi MVC Inti ASP.NET.

Bekerja dengan konteks database

Objek MvcMovieContext menangani tugas menyambungkan ke database dan memetakan Movie objek ke rekaman database. Konteks database didaftarkan dengan kontainer Dependency Injection dalam file Program.cs.

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

Sistem Konfigurasi Inti ASP.NET membaca ConnectionString kunci. Untuk pengembangan lokal, ia mendapatkan string koneksi dari appsettings.json file:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;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 SQL Server Express Database Engine, yang diinstal secara default dengan Visual Studio.
  • Mulai sesuai permintaan dengan menggunakan string koneksi.
  • Ditargetkan untuk pengembangan program. Ini berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks.
  • Secara default membuat file .mdf di direktori C:/Users/{user} .

Memeriksa database

Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).

Klik kanan pada Movie tabel (dbo.Movie) > View Designer

Klik kanan pada tabel Film > Desainer Tampilan.

Tabel film dibuka di Desainer

Perhatikan ikon kunci di samping ID. Secara default, EF membuat properti bernama ID kunci utama.

Klik kanan pada Movie tabel > Tampilkan Data

>

Tabel film terbuka dan menampilkan data

Isi basis data

Buat kelas baru bernama SeedData di folder Model . Ganti kode yang dihasilkan dengan yang berikut ini:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // 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 awal akan menghentikan proses dan tidak ada film yang ditambahkan.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Menambahkan penginisialisasi benih

Ganti isi Program.cs dengan kode berikut. Kode baru disorot.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.MapStaticAssets();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Hapus semua rekaman dalam database. Anda dapat melakukan ini dengan tautan penghapusan di browser atau dari SSOX.

Menguji aplikasi. Paksa aplikasi untuk mulai diinisialisasi, memanggil kode dalam file Program.cs, sehingga metode seed berjalan. Untuk memaksa inisialisasi, tutup jendela prompt perintah yang dibuka Visual Studio, dan mulai ulang dengan menekan Ctrl+F5.

Aplikasi ini menunjukkan data seeded.

Aplikasi MVC Movie terbuka di Microsoft Edge yang menampilkan data film

Pendahuluan

Bagian seri tutorial ini berfokus pada bekerja dengan database SQL di aplikasi MVC Core ASP.NET Anda.

Anda akan mempelajari cara:

  • Daftarkan dan konfigurasikan konteks database Entity Framework Core untuk aplikasi MVC Core ASP.NET Anda.
  • Bekerja dengan koneksi string database untuk pengembangan lokal.
  • Gunakan SQL Server Express LocalDB untuk pengembangan dan memeriksa database dan data Anda menggunakan SQL Server Object Explorer.
  • Mulailah dengan mengisi database Anda dengan data sampel awal.

Prasyarat

Tutorial ini menggunakan database yang Anda siapkan di langkah sebelumnya: Bagian 4, tambahkan model ke aplikasi MVC Inti ASP.NET.

Bekerja dengan konteks database

Objek MvcMovieContext menangani tugas menyambungkan ke database dan memetakan Movie objek ke rekaman database. Konteks database didaftarkan dengan kontainer Dependency Injection dalam file Program.cs.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

Sistem Konfigurasi Inti ASP.NET membaca ConnectionString kunci. Untuk pengembangan lokal, ia mendapatkan string koneksi dari appsettings.json file:

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

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 SQL Server Express Database Engine, yang diinstal secara default dengan Visual Studio.
  • Mulai sesuai permintaan dengan menggunakan string koneksi.
  • Ditargetkan untuk pengembangan program. Ini berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks.
  • Secara default membuat file .mdf di direktori C:/Users/{user} .

Memeriksa database

Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).

Klik kanan pada Movie tabel (dbo.Movie) > View Designer

Klik kanan pada tabel Film > Desainer Tampilan.

Tabel film dibuka di Desainer

Perhatikan ikon kunci di samping ID. Secara default, EF membuat properti bernama ID kunci utama.

Klik kanan pada Movie tabel > Tampilkan Data

>

Tabel film terbuka dan menampilkan data

Isi basis data

Buat kelas baru bernama SeedData di folder Model . Ganti kode yang dihasilkan dengan yang berikut ini:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // 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 awal akan menghentikan proses dan tidak ada film yang ditambahkan.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Menambahkan penginisialisasi benih

Ganti isi Program.cs dengan kode berikut. Kode baru disorot.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Hapus semua rekaman dalam database. Anda dapat melakukan ini dengan tautan penghapusan di browser atau dari SSOX.

Menguji aplikasi. Paksa aplikasi untuk mulai diinisialisasi, memanggil kode dalam file Program.cs, sehingga metode seed berjalan. Untuk memaksa inisialisasi, tutup jendela prompt perintah yang dibuka Visual Studio, dan mulai ulang dengan menekan Ctrl+F5.

Aplikasi ini menunjukkan data seeded.

Aplikasi MVC Movie terbuka di Microsoft Edge yang menampilkan data film

Pendahuluan

Bagian seri tutorial ini berfokus pada bekerja dengan database SQL di aplikasi MVC Core ASP.NET Anda.

Anda akan mempelajari cara:

  • Daftarkan dan konfigurasikan konteks database Entity Framework Core untuk aplikasi MVC Core ASP.NET Anda.
  • Bekerja dengan string koneksi database untuk pengembangan lokal.
  • Gunakan SQL Server Express LocalDB untuk pengembangan dan memeriksa database dan data Anda menggunakan SQL Server Object Explorer.
  • Isi basis data Anda dengan data sampel awal.

Prasyarat

Tutorial ini menggunakan database yang Anda siapkan di langkah sebelumnya: Bagian 4, tambahkan model ke aplikasi MVC Inti ASP.NET.

Bekerja dengan konteks database

Objek MvcMovieContext menangani tugas menyambungkan ke database dan memetakan Movie objek ke rekaman database. Konteks database didaftarkan dengan kontainer Dependency Injection dalam file Program.cs.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

Sistem Konfigurasi Inti ASP.NET membaca ConnectionString kunci. Untuk pengembangan lokal, ia mendapatkan string koneksi dari appsettings.json file:

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

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 SQL Server Express Database Engine, yang diinstal secara default dengan Visual Studio.
  • Mulai sesuai permintaan dengan menggunakan string koneksi.
  • Ditargetkan untuk pengembangan program. Ini berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks.
  • Secara default membuat file .mdf di direktori C:/Users/{user} .

Memeriksa database

Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).

Klik kanan pada Movie tabel (dbo.Movie) > View Designer

Klik kanan pada tabel Film > Desainer Tampilan.

Tabel film dibuka di Desainer

Perhatikan ikon kunci di samping ID. Secara default, EF membuat properti bernama ID kunci utama.

Klik kanan pada Movie tabel > Tampilkan Data

>

Tabel film terbuka dan menampilkan data

Isi basis data

Buat kelas baru bernama SeedData di folder Model . Ganti kode yang dihasilkan dengan yang berikut ini:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // 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 awal akan menghentikan proses dan tidak ada film yang ditambahkan.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

<a name=snippet_"si">

Menambahkan penginisialisasi benih

Ganti isi Program.cs dengan kode berikut. Kode baru disorot.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Hapus semua rekaman dalam database. Anda dapat melakukan ini dengan tautan penghapusan di browser atau dari SSOX.

Menguji aplikasi. Paksa aplikasi untuk mulai diinisialisasi, memanggil kode dalam file Program.cs, sehingga metode seed berjalan. Untuk memaksa inisialisasi, tutup jendela prompt perintah yang dibuka Visual Studio, dan mulai ulang dengan menekan Ctrl+F5.

Aplikasi ini menunjukkan data seeded.

Aplikasi MVC Movie terbuka di Microsoft Edge yang menampilkan data film

Pendahuluan

Bagian seri tutorial ini berfokus pada bekerja dengan database SQL di aplikasi MVC Core ASP.NET Anda.

Anda akan mempelajari cara:

  • Daftarkan dan konfigurasikan konteks database Entity Framework Core untuk aplikasi MVC Core ASP.NET Anda.
  • Bekerja dengan string koneksi database untuk pengembangan lokal.
  • Gunakan SQL Server Express LocalDB untuk pengembangan dan memeriksa database dan data Anda menggunakan SQL Server Object Explorer.
  • Isi database Anda dengan data sampel awal.

Prasyarat

Tutorial ini menggunakan database yang Anda siapkan di langkah sebelumnya: Bagian 4, tambahkan model ke aplikasi MVC Inti ASP.NET.

Bekerja dengan konteks database

Objek MvcMovieContext menangani tugas menyambungkan ke database dan memetakan Movie objek ke rekaman database. Konteks database didaftarkan dengan kontainer Dependency Injection dalam file Program.cs.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

Sistem Konfigurasi Inti ASP.NET membaca ConnectionString kunci. Untuk pengembangan lokal, ia mendapatkan string koneksi dari appsettings.json file:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;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 SQL Server Express Database Engine, yang diinstal secara default dengan Visual Studio.
  • Mulai sesuai permintaan dengan menggunakan string koneksi.
  • Ditargetkan untuk pengembangan program. Ini berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks.
  • Secara default membuat file .mdf di direktori C:/Users/{user} .

Isi basis data

Buat kelas baru bernama SeedData di folder Model . Ganti kode yang dihasilkan dengan yang berikut ini:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcMovieContext(
                serviceProvider.GetRequiredService<
                    DbContextOptions<MvcMovieContext>>()))
            {
                // 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 awal akan menghentikan proses dan tidak ada film yang ditambahkan.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Menambahkan penginisialisasi benih

Ganti isi Program.cs dengan kode berikut. Kode baru disorot.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Hapus semua rekaman dalam database. Anda dapat melakukan ini dengan tautan penghapusan di browser atau dari SSOX.

Menguji aplikasi. Paksa aplikasi untuk mulai diinisialisasi, memanggil kode dalam file Program.cs, sehingga metode seed berjalan. Untuk memaksa inisialisasi, tutup jendela prompt perintah yang dibuka Visual Studio, dan mulai ulang dengan menekan Ctrl+F5.

Aplikasi ini menunjukkan data seeded.

Aplikasi MVC Movie terbuka di Microsoft Edge yang menampilkan data film

Pendahuluan

Bagian seri tutorial ini berfokus pada bekerja dengan database SQL di aplikasi MVC Core ASP.NET Anda.

Anda akan mempelajari cara:

  • Daftarkan dan konfigurasikan konteks database Entity Framework Core untuk aplikasi MVC Core ASP.NET Anda.
  • Bekerja dengan string koneksi database untuk pengembangan lokal.
  • Gunakan SQL Server Express LocalDB untuk pengembangan dan memeriksa database dan data Anda menggunakan SQL Server Object Explorer.
  • Isi database Anda dengan data sampel awal.

Prasyarat

Tutorial ini menggunakan database yang Anda siapkan di langkah sebelumnya: Bagian 4, tambahkan model ke aplikasi MVC Inti ASP.NET.

Bekerja dengan konteks database

Objek MvcMovieContext menangani tugas menyambungkan ke database dan memetakan Movie objek ke rekaman database. Konteks database terdaftar dengan Injeksi Dependensi kontainer dalam ConfigureServices metode dalam Startup.cs file:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}

Sistem Konfigurasi Inti ASP.NET membaca ConnectionString kunci. Untuk pengembangan lokal, ia mendapatkan string koneksi dari appsettings.json file:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;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 SQL Server Express Database Engine, yang diinstal secara default dengan Visual Studio.
  • Mulai sesuai permintaan dengan menggunakan string koneksi.
  • Ditargetkan untuk pengembangan program. Ini berjalan dalam mode pengguna, sehingga tidak ada konfigurasi yang kompleks.
  • Secara default membuat file .mdf di direktori C:/Users/{user} .

Memeriksa database

Dari menu Tampilan, buka SQL Server Object Explorer (SSOX).

Menu Tampilan

Klik kanan pada Movie tabel > Perancang Tampilan

Klik kanan pada tabel Film > Desainer Tampilan

Tabel film dibuka di Desainer

Perhatikan ikon kunci di samping ID. Secara default, EF membuat properti bernama ID kunci utama.

Klik kanan pada Movie tabel > Tampilkan Data

Klik kanan pada tabel Film > untuk menampilkan data

Tabel film terbuka dan menampilkan data

Isi basis data

Buat kelas baru bernama SeedData di folder Model . Ganti kode yang dihasilkan dengan yang berikut ini:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcMovieContext(
                serviceProvider.GetRequiredService<
                    DbContextOptions<MvcMovieContext>>()))
            {
                // 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 awal akan menghentikan proses dan tidak ada film yang ditambahkan.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Menambahkan penginisialisasi benih

Ganti isi Program.cs dengan kode berikut:

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MvcMovie.Data;
using MvcMovie.Models;
using System;

namespace MvcMovie
{
    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>();
                });
    }
}

Menguji aplikasi.

Hapus semua rekaman dalam database. Anda dapat melakukan ini dengan tautan penghapusan di browser atau dari SSOX.

Paksa aplikasi untuk menginisialisasi, memanggil metode kelas di Startup, agar metode seed dapat dijalankan. Untuk memaksa inisialisasi, IIS Express harus dihentikan dan dimulai ulang. Anda dapat melakukan ini dengan salah satu pendekatan berikut:

  • Klik kanan ikon baki sistem IIS Express di area pemberitahuan dan ketuk Keluar atau Hentikan Situs:

    Ikon bilah tugas IIS Express

    Menu kontekstual

    • Jika Anda menjalankan VS dalam mode non-debug, tekan F5 untuk menjalankan dalam mode debug
    • Jika Anda menjalankan VS dalam mode debug, hentikan debugger dan tekan F5

Aplikasi ini menunjukkan data seeded.

Aplikasi MVC Movie terbuka di Microsoft Edge yang menampilkan data film