Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Note
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z aktualną wersją, zobacz artykuł w wersji .NET 10.
Autor: Joe Audette
Obiekt RazorPagesMovieContext 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 Wstrzykiwanie zależności w programie Program.cs:
- w programie Visual Studio
- Visual Studio Code
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.")));
System ASP.NET Core Configuration odczytuje ConnectionString klucz. W przypadku programowania lokalnego konfiguracja pobiera parametry połączenia z appsettings.json pliku.
- w programie Visual Studio
- Visual Studio Code
Wygenerowany parametry połączenia jest podobny do następującego kodu JSON:
{
"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"
}
}
Warning
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.
- w programie Visual Studio
- Visual Studio Code
SQL Server Express LocalDB
LocalDB to uproszczona wersja aparatu bazy danych SQL Server Express przeznaczona do opracowywania programów. Baza danych LocalDB uruchamia się na żądanie i działa w trybie użytkownika, więc nie ma złożonej konfiguracji. Domyślnie baza danych LocalDB tworzy *.mdf pliki w C:\Users\<user>\ katalogu.
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz pozycję Projektant widoków:
Zanotuj ikonę klucza obok
IDpozycji . Domyślnie program EF tworzy właściwość o nazwieIDdla klucza podstawowego.Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz polecenie Wyświetl dane:
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData w folderze Models przy użyciu następującego kodu:
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();
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return;
}
Dodawanie inicjatora inicjatora
Zaktualizuj element za Program.cs pomocą następującego wyróżnionego kodu:
- w programie Visual Studio
- Visual Studio Code
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();
W poprzednim kodzie został zmodyfikowany w Program.cs celu wykonania następujących czynności:
- Pobierz wystąpienie kontekstu bazy danych z kontenera wstrzykiwania zależności (DI).
- Wywołaj metodę
seedData.Initialize, przekazując do niej wystąpienie kontekstu bazy danych. - Po zakończeniu metody inicjowania należy usunąć kontekst. Instrukcja using gwarantuje, że kontekst zostanie usunięty.
Następujący wyjątek występuje, gdy Update-Database nie został uruchomiony:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testowanie aplikacji
Usuń wszystkie rekordy w bazie danych, aby można było uruchomić metodę inicjowania. Zatrzymaj i uruchom aplikację, aby zainicjować bazę danych. Jeśli baza danych nie jest rozmieszczana, umieść punkt if (context.Movie.Any()) przerwania i przejdź przez kod.
Aplikacja wyświetla dane rozstawione:
Dalsze kroki
Obiekt RazorPagesMovieContext 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 Wstrzykiwanie zależności w programie Program.cs:
- w programie Visual Studio
- Visual Studio Code
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();
System ASP.NET Core Configuration odczytuje ConnectionString klucz. W przypadku programowania lokalnego konfiguracja pobiera parametry połączenia z appsettings.json pliku.
- w programie Visual Studio
- Visual Studio Code
Wygenerowany parametry połączenia jest podobny do następującego kodu JSON:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
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.
- w programie Visual Studio
- Visual Studio Code
SQL Server Express LocalDB
LocalDB to uproszczona wersja aparatu bazy danych SQL Server Express przeznaczona do opracowywania programów. Baza danych LocalDB uruchamia się na żądanie i działa w trybie użytkownika, więc nie ma złożonej konfiguracji. Domyślnie baza danych LocalDB tworzy *.mdf pliki w C:\Users\<user>\ katalogu.
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz pozycję Projektant widoków:
Zanotuj ikonę klucza obok
IDpozycji . Domyślnie program EF tworzy właściwość o nazwieIDdla klucza podstawowego.Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz polecenie Wyświetl dane:
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData w folderze Models przy użyciu następującego kodu:
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();
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return;
}
Dodawanie inicjatora inicjatora
Zaktualizuj element za Program.cs pomocą następującego wyróżnionego kodu:
- w programie Visual Studio
- Visual Studio Code
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();
W poprzednim kodzie został zmodyfikowany w Program.cs celu wykonania następujących czynności:
- Pobierz wystąpienie kontekstu bazy danych z kontenera wstrzykiwania zależności (DI).
- Wywołaj metodę
seedData.Initialize, przekazując do niej wystąpienie kontekstu bazy danych. - Po zakończeniu metody inicjowania należy usunąć kontekst. Instrukcja using gwarantuje, że kontekst zostanie usunięty.
Następujący wyjątek występuje, gdy Update-Database nie został uruchomiony:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testowanie aplikacji
Usuń wszystkie rekordy w bazie danych, aby można było uruchomić metodę inicjowania. Zatrzymaj i uruchom aplikację, aby zainicjować bazę danych. Jeśli baza danych nie jest rozmieszczana, umieść punkt if (context.Movie.Any()) przerwania i przejdź przez kod.
Aplikacja wyświetla dane rozstawione:
Dalsze kroki
Obiekt RazorPagesMovieContext 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 Wstrzykiwanie zależności w programie Program.cs:
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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();
System ASP.NET Core Configuration odczytuje ConnectionString klucz. W przypadku programowania lokalnego konfiguracja pobiera parametry połączenia z appsettings.json pliku.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
Wygenerowany parametry połączenia jest podobny do następującego kodu JSON:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
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.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
SQL Server Express LocalDB
LocalDB to uproszczona wersja aparatu bazy danych SQL Server Express przeznaczona do opracowywania programów. Baza danych LocalDB uruchamia się na żądanie i działa w trybie użytkownika, więc nie ma złożonej konfiguracji. Domyślnie baza danych LocalDB tworzy *.mdf pliki w C:\Users\<user>\ katalogu.
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz pozycję Projektant widoków:
Zanotuj ikonę klucza obok
IDpozycji . Domyślnie program EF tworzy właściwość o nazwieIDdla klucza podstawowego.Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz polecenie Wyświetl dane:
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData w folderze Models przy użyciu następującego kodu:
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();
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return;
}
Dodawanie inicjatora inicjatora
Zaktualizuj element za Program.cs pomocą następującego wyróżnionego kodu:
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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();
W poprzednim kodzie został zmodyfikowany w Program.cs celu wykonania następujących czynności:
- Pobierz wystąpienie kontekstu bazy danych z kontenera wstrzykiwania zależności (DI).
- Wywołaj metodę
seedData.Initialize, przekazując do niej wystąpienie kontekstu bazy danych. - Po zakończeniu metody inicjowania należy usunąć kontekst. Instrukcja using gwarantuje, że kontekst zostanie usunięty.
Następujący wyjątek występuje, gdy Update-Database nie został uruchomiony:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testowanie aplikacji
Usuń wszystkie rekordy w bazie danych, aby można było uruchomić metodę inicjowania. Zatrzymaj i uruchom aplikację, aby zainicjować bazę danych. Jeśli baza danych nie jest rozmieszczana, umieść punkt if (context.Movie.Any()) przerwania i przejdź przez kod.
Aplikacja wyświetla dane rozstawione:
Dalsze kroki
Obiekt RazorPagesMovieContext 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 Wstrzykiwanie zależności w programie Program.cs:
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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();
System ASP.NET Core Configuration odczytuje ConnectionString klucz. W przypadku programowania lokalnego konfiguracja pobiera parametry połączenia z appsettings.json pliku.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
Wygenerowany parametry połączenia jest podobny do następującego kodu JSON:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
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.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
SQL Server Express LocalDB
LocalDB to uproszczona wersja aparatu bazy danych SQL Server Express przeznaczona do opracowywania programów. Baza danych LocalDB uruchamia się na żądanie i działa w trybie użytkownika, więc nie ma złożonej konfiguracji. Domyślnie baza danych LocalDB tworzy *.mdf pliki w C:\Users\<user>\ katalogu.
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz pozycję Projektant widoków:
Zanotuj ikonę klucza obok
IDpozycji . Domyślnie program EF tworzy właściwość o nazwieIDdla klucza podstawowego.Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz polecenie Wyświetl dane:
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData w folderze Models przy użyciu następującego kodu:
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();
}
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return;
}
Dodawanie inicjatora inicjatora
Zaktualizuj element za Program.cs pomocą następującego wyróżnionego kodu:
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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();
W poprzednim kodzie został zmodyfikowany w Program.cs celu wykonania następujących czynności:
- Pobierz wystąpienie kontekstu bazy danych z kontenera wstrzykiwania zależności (DI).
- Wywołaj metodę
seedData.Initialize, przekazując do niej wystąpienie kontekstu bazy danych. - Po zakończeniu metody inicjowania należy usunąć kontekst. Instrukcja using gwarantuje, że kontekst zostanie usunięty.
Następujący wyjątek występuje, gdy Update-Database nie został uruchomiony:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testowanie aplikacji
Usuń wszystkie rekordy w bazie danych, aby można było uruchomić metodę inicjowania. Zatrzymaj i uruchom aplikację, aby zainicjować bazę danych. Jeśli baza danych nie jest rozmieszczana, umieść punkt if (context.Movie.Any()) przerwania i przejdź przez kod.
Aplikacja wyświetla dane rozstawione:
Dalsze kroki
Wyświetl lub pobierz przykładowy kod (jak pobrać).
Obiekt RazorPagesMovieContext 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 Wstrzykiwanie zależności w metodzie w ConfigureServicespliku Startup.cs :
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
System ASP.NET Core Configuration odczytuje ConnectionString klucz. W przypadku programowania lokalnego konfiguracja pobiera parametry połączenia z appsettings.json pliku.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
Wygenerowany parametry połączenia jest podobny do następującego kodu JSON:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
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.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
SQL Server Express LocalDB
LocalDB to uproszczona wersja aparatu bazy danych SQL Server Express przeznaczona do opracowywania programów. Baza danych LocalDB uruchamia się na żądanie i działa w trybie użytkownika, więc nie ma złożonej konfiguracji. Domyślnie baza danych LocalDB tworzy *.mdf pliki w C:\Users\<user>\ katalogu.
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz pozycję Projektant widoków:
Zanotuj ikonę klucza obok
IDpozycji . Domyślnie program EF tworzy właściwość o nazwieIDdla klucza podstawowego.Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz polecenie Wyświetl dane:
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData w folderze Models przy użyciu następującego kodu:
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();
}
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return;
}
Dodawanie inicjatora inicjatora
Zastąp zawartość pliku Program.cs następującym kodem:
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>();
});
}
}
W poprzednim kodzie metoda została zmodyfikowana w Main celu wykonania następujących czynności:
- Pobierz wystąpienie kontekstu bazy danych z kontenera wstrzykiwania zależności.
- Wywołaj metodę
seedData.Initialize, przekazując do niej wystąpienie kontekstu bazy danych. - Po zakończeniu metody inicjowania należy usunąć kontekst. Instrukcja using gwarantuje, że kontekst zostanie usunięty.
Następujący wyjątek występuje, gdy Update-Database nie został uruchomiony:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testowanie aplikacji
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
Usuń wszystkie rekordy w bazie danych. Używanie linków usuwania w przeglądarce lub z poziomu systemu SSOX
Wymuś zainicjowanie aplikacji przez wywołanie metod w
Startupklasie, więc metoda inicjowania jest uruchamiana. Aby wymusić inicjowanie, należy zatrzymać i ponownie uruchomić usługę IIS Express. Zatrzymaj i uruchom ponownie usługi IIS przy użyciu dowolnej z następujących metod:Kliknij prawym przyciskiem myszy ikonę paska zadań systemu IIS Express w obszarze powiadomień i wybierz polecenie Zakończ lub Zatrzymaj lokację:
Jeśli aplikacja jest uruchomiona w trybie nie debugowania, naciśnij F5 , aby uruchomić w trybie debugowania.
Jeśli aplikacja jest w trybie debugowania, zatrzymaj debuger i naciśnij F5.
Aplikacja wyświetla dane rozstawione:
Dalsze kroki
Wyświetl lub pobierz przykładowy kod (jak pobrać).
Obiekt RazorPagesMovieContext 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 Wstrzykiwanie zależności w metodzie w ConfigureServicespliku Startup.cs :
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
System ASP.NET Core Configuration odczytuje ConnectionString klucz. W przypadku programowania lokalnego konfiguracja pobiera parametry połączenia z appsettings.json pliku.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
Wygenerowany parametry połączenia będzie podobny do następującego:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
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.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
SQL Server Express LocalDB
LocalDB to uproszczona wersja aparatu bazy danych SQL Server Express przeznaczona do opracowywania programów. Baza danych LocalDB uruchamia się na żądanie i działa w trybie użytkownika, więc nie ma złożonej konfiguracji. Domyślnie baza danych LocalDB tworzy *.mdf pliki w C:\Users\<user>\ katalogu.
W menu Widok otwórz program SQL Server Eksplorator obiektów (SSOX).
Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz pozycję Projektant widoków:
Zanotuj ikonę klucza obok IDpozycji . Domyślnie program EF tworzy właściwość o nazwie ID dla klucza podstawowego.
Kliknij prawym przyciskiem myszy tabelę
Moviei wybierz polecenie Wyświetl dane:
Inicjowanie bazy danych
Utwórz nową klasę o nazwie SeedData w folderze Models przy użyciu następującego kodu:
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();
}
}
}
}
Jeśli w bazie danych znajdują się jakiekolwiek filmy, inicjator inicjatora inicjatora zwraca i nie są dodawane żadne filmy.
if (context.Movie.Any())
{
return;
}
Dodawanie inicjatora inicjatora
Zastąp zawartość pliku Program.cs następującym kodem:
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>();
});
}
}
W poprzednim kodzie metoda została zmodyfikowana w Main celu wykonania następujących czynności:
- Pobierz wystąpienie kontekstu bazy danych z kontenera wstrzykiwania zależności.
- Wywołaj metodę
seedData.Initialize, przekazując do niej wystąpienie kontekstu bazy danych. - Po zakończeniu metody inicjowania należy usunąć kontekst. Instrukcja using gwarantuje, że kontekst zostanie usunięty.
Następujący wyjątek występuje, gdy Update-Database nie został uruchomiony:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testowanie aplikacji
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
Usuń wszystkie rekordy w bazie danych. Użyj linków usuwania w przeglądarce lub z systemu SSOX.
Wymuś zainicjowanie aplikacji przez wywołanie metod w
Startupklasie, więc metoda inicjowania jest uruchamiana. Aby wymusić inicjowanie, należy zatrzymać i ponownie uruchomić usługę IIS Express. Zatrzymaj i uruchom ponownie usługi IIS przy użyciu dowolnej z następujących metod: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 aplikacja jest uruchomiona w trybie nie debugowania, naciśnij F5 , aby uruchomić w trybie debugowania.
- Jeśli aplikacja jest w trybie debugowania, zatrzymaj debuger i naciśnij F5.
Aplikacja wyświetla dane rozstawione: