Część 5, praca z bazą danych w aplikacji MVC platformy ASP.NET Core
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Przez Rick Anderson i Jon P Smith.
Obiekt MvcMovieContext
obsługuje zadanie nawiązywania połączenia z bazą danych i mapowanie Movie
obiektów na rekordy bazy danych. Kontekst bazy danych jest zarejestrowany w kontenerze Program.cs
Wstrzykiwanie zależności w pliku:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
System ASP.NET Core Configuration odczytuje ConnectionString
klucz. W przypadku programowania lokalnego pobiera parametry połączenia z appsettings.json
pliku:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
SQL Server Express LocalDB
LocalDB:
- To uproszczona wersja aparatu bazy danych SQL Server Express Database, instalowana domyślnie w programie Visual Studio.
- Rozpoczyna się na żądanie przy użyciu parametry połączenia.
- Jest przeznaczony do opracowywania programów. Działa w trybie użytkownika, więc nie ma złożonej konfiguracji.
- Domyślnie tworzy pliki .mdf w katalogu C:/Users/{user} .
Badanie bazy danych
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy tabelę Movie
(dbo.Movie
) > Projektant widoków
Zanotuj ikonę klucza obok ID
pozycji . Domyślnie program EF tworzy właściwość o nazwie ID
klucz podstawowy.
Kliknij prawym przyciskiem myszy tabelę Movie
> Wyświetl dane
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData
w folderze Models . Zastąp wygenerowany kod następującym kodem:
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();
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Dodawanie inicjatora inicjatora
Zastąp zawartość Program.cs
pliku następującym kodem. Nowy kod został wyróżniony.
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();
Usuń wszystkie rekordy w bazie danych. Można to zrobić za pomocą linków usuwania w przeglądarce lub z poziomu systemu SSOX.
Testowanie aplikacji. Wymuś zainicjowanie aplikacji, wywołując kod w pliku, więc metoda inicjowania Program.cs
jest uruchamiana. Aby wymusić inicjowanie, zamknij okno wiersza polecenia otwarte przez program Visual Studio i uruchom ponownie, naciskając Ctrl+F5.
Aplikacja wyświetla dane rozstawione.
Obiekt MvcMovieContext
obsługuje zadanie nawiązywania połączenia z bazą danych i mapowanie Movie
obiektów na rekordy bazy danych. Kontekst bazy danych jest zarejestrowany w kontenerze Program.cs
Wstrzykiwanie zależności w pliku:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
System ASP.NET Core Configuration odczytuje ConnectionString
klucz. W przypadku programowania lokalnego pobiera parametry połączenia z appsettings.json
pliku:
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
SQL Server Express LocalDB
LocalDB:
- To uproszczona wersja aparatu bazy danych SQL Server Express Database, instalowana domyślnie w programie Visual Studio.
- Rozpoczyna się na żądanie przy użyciu parametry połączenia.
- Jest przeznaczony do opracowywania programów. Działa w trybie użytkownika, więc nie ma złożonej konfiguracji.
- Domyślnie tworzy pliki .mdf w katalogu C:/Users/{user} .
Badanie bazy danych
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy tabelę Movie
(dbo.Movie
) > Projektant widoków
Zanotuj ikonę klucza obok ID
pozycji . Domyślnie program EF tworzy właściwość o nazwie ID
klucz podstawowy.
Kliknij prawym przyciskiem myszy tabelę Movie
> Wyświetl dane
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData
w folderze Models . Zastąp wygenerowany kod następującym kodem:
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();
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Dodawanie inicjatora inicjatora
Zastąp zawartość Program.cs
pliku następującym kodem. Nowy kod został wyróżniony.
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();
Usuń wszystkie rekordy w bazie danych. Można to zrobić za pomocą linków usuwania w przeglądarce lub z poziomu systemu SSOX.
Testowanie aplikacji. Wymuś zainicjowanie aplikacji, wywołując kod w pliku, więc metoda inicjowania Program.cs
jest uruchamiana. Aby wymusić inicjowanie, zamknij okno wiersza polecenia otwarte przez program Visual Studio i uruchom ponownie, naciskając Ctrl+F5.
Aplikacja wyświetla dane rozstawione.
Obiekt MvcMovieContext
obsługuje zadanie nawiązywania połączenia z bazą danych i mapowanie Movie
obiektów na rekordy bazy danych. Kontekst bazy danych jest zarejestrowany w kontenerze Program.cs
Wstrzykiwanie zależności w pliku:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
System ASP.NET Core Configuration odczytuje ConnectionString
klucz. W przypadku programowania lokalnego pobiera parametry połączenia z appsettings.json
pliku:
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
SQL Server Express LocalDB
LocalDB:
- To uproszczona wersja aparatu bazy danych SQL Server Express Database, instalowana domyślnie w programie Visual Studio.
- Rozpoczyna się na żądanie przy użyciu parametry połączenia.
- Jest przeznaczony do opracowywania programów. Działa w trybie użytkownika, więc nie ma złożonej konfiguracji.
- Domyślnie tworzy pliki .mdf w katalogu C:/Users/{user} .
Badanie bazy danych
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy tabelę Movie
(dbo.Movie
) > Projektant widoków
Zanotuj ikonę klucza obok ID
pozycji . Domyślnie program EF tworzy właściwość o nazwie ID
klucz podstawowy.
Kliknij prawym przyciskiem myszy tabelę Movie
> Wyświetl dane
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData
w folderze Models . Zastąp wygenerowany kod następującym kodem:
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();
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
<a name=snippet_"si">
Dodawanie inicjatora inicjatora
Zastąp zawartość Program.cs
pliku następującym kodem. Nowy kod został wyróżniony.
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();
Usuń wszystkie rekordy w bazie danych. Można to zrobić za pomocą linków usuwania w przeglądarce lub z poziomu systemu SSOX.
Testowanie aplikacji. Wymuś zainicjowanie aplikacji, wywołując kod w pliku, więc metoda inicjowania Program.cs
jest uruchamiana. Aby wymusić inicjowanie, zamknij okno wiersza polecenia otwarte przez program Visual Studio i uruchom ponownie, naciskając Ctrl+F5.
Aplikacja wyświetla dane rozstawione.
Obiekt MvcMovieContext
obsługuje zadanie nawiązywania połączenia z bazą danych i mapowanie Movie
obiektów na rekordy bazy danych. Kontekst bazy danych jest zarejestrowany w kontenerze Program.cs
Wstrzykiwanie zależności w pliku:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
System ASP.NET Core Configuration odczytuje ConnectionString
klucz. W przypadku programowania lokalnego pobiera parametry połączenia z appsettings.json
pliku:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
SQL Server Express LocalDB
LocalDB:
- To uproszczona wersja aparatu bazy danych SQL Server Express Database, instalowana domyślnie w programie Visual Studio.
- Rozpoczyna się na żądanie przy użyciu parametry połączenia.
- Jest przeznaczony do opracowywania programów. Działa w trybie użytkownika, więc nie ma złożonej konfiguracji.
- Domyślnie tworzy pliki .mdf w katalogu C:/Users/{user} .
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData
w folderze Models . Zastąp wygenerowany kod następującym kodem:
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();
}
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Dodawanie inicjatora inicjatora
Zastąp zawartość Program.cs
pliku następującym kodem. Nowy kod został wyróżniony.
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();
Usuń wszystkie rekordy w bazie danych. Można to zrobić za pomocą linków usuwania w przeglądarce lub z poziomu systemu SSOX.
Testowanie aplikacji. Wymuś zainicjowanie aplikacji, wywołując kod w pliku, więc metoda inicjowania Program.cs
jest uruchamiana. Aby wymusić inicjowanie, zamknij okno wiersza polecenia otwarte przez program Visual Studio i uruchom ponownie, naciskając Ctrl+F5.
Aplikacja wyświetla dane rozstawione.
Obiekt MvcMovieContext
obsługuje zadanie nawiązywania połączenia z bazą danych i mapowanie Movie
obiektów na rekordy bazy danych. Kontekst bazy danych jest zarejestrowany w kontenerze wstrzykiwania zależności w ConfigureServices
metodzie Startup.cs
w pliku :
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
System ASP.NET Core Configuration odczytuje ConnectionString
klucz. W przypadku programowania lokalnego pobiera parametry połączenia z appsettings.json
pliku:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
SQL Server Express LocalDB
LocalDB:
- To uproszczona wersja aparatu bazy danych SQL Server Express Database, instalowana domyślnie w programie Visual Studio.
- Rozpoczyna się na żądanie przy użyciu parametry połączenia.
- Jest przeznaczony do opracowywania programów. Działa w trybie użytkownika, więc nie ma złożonej konfiguracji.
- Domyślnie tworzy pliki .mdf w katalogu C:/Users/{user} .
Badanie bazy danych
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy projektanta widoków Movie
tabeli >
Zanotuj ikonę klucza obok ID
pozycji . Domyślnie program EF tworzy właściwość o nazwie ID
klucz podstawowy.
Kliknij prawym przyciskiem myszy tabelę Movie
> Wyświetl dane
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData
w folderze Models . Zastąp wygenerowany kod następującym kodem:
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();
}
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Dodawanie inicjatora inicjatora
Zastąp zawartość Program.cs
następującym kodem:
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>();
});
}
}
Testowanie aplikacji.
Usuń wszystkie rekordy w bazie danych. Można to zrobić za pomocą linków usuwania w przeglądarce lub z poziomu systemu SSOX.
Wymuś zainicjowanie aplikacji, wywołując metody w Startup
klasie, więc metoda seed jest uruchamiana. Aby wymusić inicjowanie, należy zatrzymać i ponownie uruchomić usługę IIS Express. Można to zrobić przy użyciu dowolnego z następujących podejść:
Kliknij prawym przyciskiem myszy ikonę paska zadań systemu IIS Express w obszarze powiadomień, a następnie naciśnij pozycję Zakończ lub Zatrzymaj lokację:
- Jeśli program VS był uruchomiony w trybie nie debugowania, naciśnij F5, aby uruchomić w trybie debugowania
- Jeśli program VS był uruchomiony w trybie debugowania, zatrzymaj debuger i naciśnij F5
Aplikacja wyświetla dane rozstawione.