Notatka
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 10.
Ostrzeżenie
Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz .NET i .NET Core Support Policy. Aby zapoznać się z bieżącą wersją, zobacz artykuł w wersji .NET 10.
Wprowadzenie
Ta część serii samouczków koncentruje się na pracy z bazą danych SQL w aplikacji ASP.NET Core MVC.
Dowiesz się, jak:
- Zarejestruj i skonfiguruj kontekst bazy danych Entity Framework Core dla aplikacji MVC ASP.NET Core.
- Praca z parametrami połączenia bazy danych na potrzeby programowania lokalnego.
- Użyj SQL Server Express LocalDB do programowania i analizowania bazy danych i danych przy użyciu SQL Server Eksplorator obiektów.
- Wypełnij bazę danych danymi przykładowymi.
Warunek wstępny
W tym samouczku użyto bazy danych skonfigurowanej w poprzednim kroku: Part 4, dodać model do aplikacji MVC ASP.NET Core.
Praca z kontekstem bazy danych
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 klucz ConnectionString. W przypadku programowania lokalnego pobiera parametry połączenia z pliku appsettings.json:
"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 (lokalna baza danych)
LocalDB:
- Jest to uproszczona wersja SQL Server Express Database Engine instalowana domyślnie z 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 View otwórz 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?}")
.WithStaticAssets();
app.Run();
Testowanie aplikacji. Wymuś zainicjowanie aplikacji, wywołując kod w pliku Program.cs, aby uruchomić metodę seed. Aby wymusić inicjalizację, zamknij okno wiersza poleceń, które Visual Studio otworzyło, a następnie uruchom ponownie, naciskając klawisze Ctrl+F5.
Aplikacja wyświetla dane rozstawione.
Odświeżenie tabeli Movie pokazuje te same dane.
Uwaga
Może nie być możliwe wprowadzenie przecinków dziesiętnych w polach dziesiętnych. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż anglojęzyczne, które używają przecinka (",") jako separatora dziesiętnego, oraz dla formatów dat spoza USA, należy przeprowadzić globalizację aplikacji. Zobacz ten komentarz GitHub 4076 aby uzyskać instrukcje, jak dodać przecinek dziesiętny.
Wprowadzenie
Ta część serii samouczków koncentruje się na pracy z bazą danych SQL w aplikacji ASP.NET Core MVC.
Dowiesz się, jak:
- Zarejestruj i skonfiguruj kontekst bazy danych Entity Framework Core dla aplikacji MVC ASP.NET Core.
- Praca z parametrami połączenia bazy danych na potrzeby programowania lokalnego.
- Użyj SQL Server Express LocalDB do programowania i analizowania bazy danych i danych przy użyciu SQL Server Eksplorator obiektów.
- Wypełnij bazę danych danymi przykładowymi.
Warunek wstępny
W tym samouczku użyto bazy danych skonfigurowanej w poprzednim kroku: Part 4, dodać model do aplikacji MVC ASP.NET Core.
Praca z kontekstem bazy danych
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 klucz ConnectionString. W przypadku programowania lokalnego pobiera parametry połączenia z pliku appsettings.json:
"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 (lokalna baza danych)
LocalDB:
- Jest to uproszczona wersja SQL Server Express Database Engine instalowana domyślnie z 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 View otwórz 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ć inicjalizację, zamknij okno wiersza poleceń, które Visual Studio otworzyło, a następnie uruchom ponownie, naciskając klawisze Ctrl+F5.
Aplikacja wyświetla dane rozstawione.
Uwaga
Może nie być możliwe wprowadzenie przecinków dziesiętnych w polach dziesiętnych. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż anglojęzyczne, które używają przecinka (",") jako separatora dziesiętnego, oraz dla formatów dat spoza USA, należy przeprowadzić globalizację aplikacji. Zobacz ten komentarz GitHub 4076 aby uzyskać instrukcje, jak dodać przecinek dziesiętny.
Wprowadzenie
Ta część serii samouczków koncentruje się na pracy z bazą danych SQL w aplikacji ASP.NET Core MVC.
Dowiesz się, jak:
- Zarejestruj i skonfiguruj kontekst bazy danych Entity Framework Core dla aplikacji MVC ASP.NET Core.
- Praca z parametrami połączenia bazy danych na potrzeby programowania lokalnego.
- Użyj SQL Server Express LocalDB do programowania i analizowania bazy danych i danych przy użyciu SQL Server Eksplorator obiektów.
- Wypełnij bazę danych danymi przykładowymi.
Warunek wstępny
W tym samouczku użyto bazy danych skonfigurowanej w poprzednim kroku: Part 4, dodać model do aplikacji MVC ASP.NET Core.
Praca z kontekstem bazy danych
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 klucz ConnectionString. W przypadku programowania lokalnego pobiera parametry połączenia z pliku appsettings.json:
"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 (lokalna baza danych)
LocalDB:
- Jest to uproszczona wersja SQL Server Express Database Engine instalowana domyślnie z 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 View otwórz 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ć inicjalizację, zamknij okno wiersza poleceń, które Visual Studio otworzyło, a następnie uruchom ponownie, naciskając klawisze Ctrl+F5.
Aplikacja wyświetla dane rozstawione.
Uwaga
Może nie być możliwe wprowadzenie przecinków dziesiętnych w polach dziesiętnych. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż anglojęzyczne, które używają przecinka (",") jako separatora dziesiętnego, oraz dla formatów dat spoza USA, należy przeprowadzić globalizację aplikacji. Zobacz ten komentarz GitHub 4076 aby uzyskać instrukcje, jak dodać przecinek dziesiętny.
Wprowadzenie
Ta część serii samouczków koncentruje się na pracy z bazą danych SQL w aplikacji ASP.NET Core MVC.
Dowiesz się, jak:
- Zarejestruj i skonfiguruj kontekst bazy danych Entity Framework Core dla aplikacji MVC ASP.NET Core.
- Praca z parametrami połączenia bazy danych na potrzeby programowania lokalnego.
- Użyj SQL Server Express LocalDB do programowania i analizowania bazy danych i danych przy użyciu SQL Server Eksplorator obiektów.
- Wypełnij bazę danych danymi przykładowymi.
Warunek wstępny
W tym samouczku użyto bazy danych skonfigurowanej w poprzednim kroku: Part 4, dodać model do aplikacji MVC ASP.NET Core.
Praca z kontekstem bazy danych
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 klucz ConnectionString. W przypadku programowania lokalnego pobiera parametry połączenia z pliku appsettings.json:
"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 (lokalna baza danych)
LocalDB:
- Jest to uproszczona wersja SQL Server Express Database Engine instalowana domyślnie z 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 View otwórz 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ć inicjalizację, zamknij okno wiersza poleceń, które Visual Studio otworzyło, a następnie uruchom ponownie, naciskając klawisze Ctrl+F5.
Aplikacja wyświetla dane rozstawione.
Uwaga
Może nie być możliwe wprowadzenie przecinków dziesiętnych w polach dziesiętnych. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż anglojęzyczne, które używają przecinka (",") jako separatora dziesiętnego, oraz dla formatów dat spoza USA, należy przeprowadzić globalizację aplikacji. Zobacz ten komentarz GitHub 4076 aby uzyskać instrukcje, jak dodać przecinek dziesiętny.
Wprowadzenie
Ta część serii samouczków koncentruje się na pracy z bazą danych SQL w aplikacji ASP.NET Core MVC.
Dowiesz się, jak:
- Zarejestruj i skonfiguruj kontekst bazy danych Entity Framework Core dla aplikacji MVC ASP.NET Core.
- Praca z parametrami połączenia bazy danych na potrzeby programowania lokalnego.
- Użyj SQL Server Express LocalDB do programowania i analizowania bazy danych i danych przy użyciu SQL Server Eksplorator obiektów.
- Wypełnij bazę danych danymi przykładowymi.
Warunek wstępny
W tym samouczku użyto bazy danych skonfigurowanej w poprzednim kroku: Part 4, dodać model do aplikacji MVC ASP.NET Core.
Praca z kontekstem bazy danych
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 klucz ConnectionString. W przypadku programowania lokalnego pobiera parametry połączenia z pliku appsettings.json:
"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 (lokalna baza danych)
LocalDB:
- Jest to uproszczona wersja SQL Server Express Database Engine instalowana domyślnie z 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ć inicjalizację, zamknij okno wiersza poleceń, które Visual Studio otworzyło, a następnie uruchom ponownie, naciskając klawisze Ctrl+F5.
Aplikacja wyświetla dane rozstawione.
Uwaga
Może nie być możliwe wprowadzenie przecinków dziesiętnych w polach dziesiętnych. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż anglojęzyczne, które używają przecinka (",") jako separatora dziesiętnego, oraz dla formatów dat spoza USA, należy przeprowadzić globalizację aplikacji. Zobacz ten komentarz GitHub 4076 aby uzyskać instrukcje, jak dodać przecinek dziesiętny.
Wprowadzenie
Ta część serii samouczków koncentruje się na pracy z bazą danych SQL w aplikacji ASP.NET Core MVC.
Dowiesz się, jak:
- Zarejestruj i skonfiguruj kontekst bazy danych Entity Framework Core dla aplikacji MVC ASP.NET Core.
- Praca z parametrami połączenia bazy danych na potrzeby programowania lokalnego.
- Użyj SQL Server Express LocalDB do programowania i analizowania bazy danych i danych przy użyciu SQL Server Eksplorator obiektów.
- Wypełnij bazę danych danymi przykładowymi.
Warunek wstępny
W tym samouczku użyto bazy danych skonfigurowanej w poprzednim kroku: Part 4, dodać model do aplikacji MVC ASP.NET Core.
Praca z kontekstem bazy danych
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 klucz ConnectionString. W przypadku programowania lokalnego pobiera parametry połączenia z pliku appsettings.json:
"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 (lokalna baza danych)
LocalDB:
- Jest to uproszczona wersja SQL Server Express Database Engine instalowana domyślnie z 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 View otwórz 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.
Uwaga
Może nie być możliwe wprowadzenie przecinków dziesiętnych w polach dziesiętnych. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż anglojęzyczne, które używają przecinka (",") jako separatora dziesiętnego, oraz dla formatów dat spoza USA, należy przeprowadzić globalizację aplikacji. Zobacz ten komentarz GitHub 4076 aby uzyskać instrukcje, jak dodać przecinek dziesiętny.