Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz artykuł w wersji .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 artykuł w wersji .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 wstrzykiwania 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 silnika bazy danych SQL Server Express, instalowana domyślnie w Visual Studio.
- Rozpoczyna się na żądanie przy użyciu ciągu 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
>
Zwróć uwagę na ikonę klucza obok ID
. Domyślnie program EF tworzy właściwość o nazwie ID
klucz podstawowy.
Kliknij prawym przyciskiem myszy tabelę Movie
> Wyświetl dane
Zasianie 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 zwraca kontrolę i nie dodaje żadnych filmów.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Dodaj inicjator seeda
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 Program.cs
, aby uruchomić metodę seed. 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 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 silnika bazy danych SQL Server Express, instalowana domyślnie w Visual Studio.
- Rozpoczyna się na żądanie przy użyciu ciągu 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
>
Zwróć uwagę na ikonę klucza obok ID
. Domyślnie program EF tworzy właściwość o nazwie ID
klucz podstawowy.
Kliknij prawym przyciskiem myszy tabelę Movie
> Wyświetl dane
Zasianie 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 zwraca kontrolę i nie dodaje żadnych filmów.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Dodaj inicjator seeda
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 Program.cs
, aby uruchomić metodę seed. 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 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 silnika bazy danych SQL Server Express, instalowana domyślnie w Visual Studio.
- Rozpoczyna się na żądanie przy użyciu ciągu 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
>
Zwróć uwagę na ikonę klucza obok ID
. Domyślnie program EF tworzy właściwość o nazwie ID
klucz podstawowy.
Kliknij prawym przyciskiem myszy tabelę Movie
> Wyświetl dane
Zasianie 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 zwraca kontrolę i nie dodaje żadnych filmów.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
<a name=snippet_"si">
Dodaj inicjator seeda
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 Program.cs
, aby uruchomić metodę seed. 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 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 silnika bazy danych SQL Server Express, instalowana domyślnie w Visual Studio.
- Rozpoczyna się na żądanie przy użyciu ciągu 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} .
Zasianie 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 zwraca kontrolę i nie dodaje żadnych filmów.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Dodaj inicjator seeda
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 Program.cs
, aby uruchomić metodę seed. 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 w pliku Startup.cs
.
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 silnika bazy danych SQL Server Express, instalowana domyślnie w Visual Studio.
- Rozpoczyna się na żądanie przy użyciu ciągu 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 Movie
tabelę w > Projektancie Widoków
Zwróć uwagę na ikonę klucza obok ID
. Domyślnie program EF tworzy właściwość o nazwie ID
klucz podstawowy.
Kliknij prawym przyciskiem myszy tabelę Movie
> Wyświetl dane
Zasianie 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 zwraca kontrolę i nie dodaje żadnych filmów.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Dodaj inicjator seeda
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 klasie Startup
, aby uruchomić metodę seed. 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ę systemową IIS Express w obszarze powiadomień i wybierz Zakończ lub Zatrzymaj witrynę:
- 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.