Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Note
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Warning
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
A RazorPagesMovieContext objektum kezeli az adatbázishoz való csatlakozás és Movie objektumok adatbázisrekordokhoz való leképezésének feladatát. Az adatbázis-környezet a Dependency Injection tárolóban van regisztrálva Program.cs.
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.")));
A ASP.NET Core Configuration rendszer beolvassa a ConnectionString kulcsot. A helyi fejlesztés során a beállítások lekérik a kapcsolati sztringet a appsettings.json fájlból.
A létrehozott kapcsolati sztring a következő JSON-hoz hasonló:
{
"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
Ez a cikk egy helyi adatbázist használ, amely nem igényli a felhasználó hitelesítését. A termelésben használt alkalmazásoknak az elérhető legbiztonságosabb hitelesítési folyamatot kell használniuk. Az üzembe helyezett teszt- és éles alkalmazások hitelesítéséről további információt Biztonságos hitelesítési folyamatokcímű témakörben talál.
SQL Server Express LocalDB (helyi adatbáziskezelő szoftver)
A LocalDB az SQL Server Express adatbázismotor egyszerűsített verziója, amely programfejlesztésre szolgál. A LocalDB igény szerint indul el, és felhasználói módban fut, így nincs összetett konfiguráció. Alapértelmezés szerint a LocalDB-adatbázis fájlokat hoz létre *.mdf a C:\Users\<user>\ könyvtárban.
A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).
Kattintson a jobb gombbal a
Movietáblára, és válassza Nézettervező:
Figyelje meg a
IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezettIDtulajdonságot.Kattintson a jobb gombbal a
Movietáblára, és válassza Adatok megtekintése:
Az adatbázis üzembe helyezése
Hozzon létre egy új osztályt SeedData a Models mappában a következő kóddal:
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();
}
}
}
Ha vannak filmek az adatbázisban, a seed inicializáló befejezi a működését, és nem ad hozzá filmeket.
if (context.Movie.Any())
{
return;
}
Add meg a mag inicializálót
Frissítse a Program.cs következő kiemelt kóddal:
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();
Az előző kódban Program.cs a következő módon lett módosítva:
- Kérje le az adatbázis-környezetpéldányt a függőséginjektálási (DI) tárolóból.
- Hívja meg a metódust
seedData.Initialize, és adja át neki az adatbázis-környezetpéldányt. - Amikor a seed-függvény befejeződik, távolítsa el a kontextust. A felhasználói utasítás biztosítja, hogy a környezet el legyen osztva.
A következő kivétel akkor fordul elő, ha Update-Database nem futtatták:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Az alkalmazás tesztelése
Törölje az adatbázisban lévő összes rekordot, hogy a kezdő metódus fusson. Állítsa le és indítsa el az alkalmazást az adatbázis üzembe helyezése érdekében. Ha az adatbázis nincs feltöltve, helyezzen egy töréspontot a if (context.Movie.Any())-ra, és lépjen végig a kódon.
Az alkalmazás a kiemelt adatokat jeleníti meg:
Következő lépések
A RazorPagesMovieContext objektum kezeli az adatbázishoz való csatlakozás és Movie objektumok adatbázisrekordokhoz való leképezésének feladatát. Az adatbázis-környezet a Dependency Injection tárolóban van regisztrálva Program.cs.
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();
A ASP.NET Core Configuration rendszer beolvassa a ConnectionString kulcsot. A helyi fejlesztés során a beállítások lekérik a kapcsolati sztringet a appsettings.json fájlból.
A létrehozott kapcsolati sztring a következő JSON-hoz hasonló:
{
"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
Ez a cikk egy helyi adatbázist használ, amely nem igényli a felhasználó hitelesítését. A termelésben használt alkalmazásoknak az elérhető legbiztonságosabb hitelesítési folyamatot kell használniuk. Az üzembe helyezett teszt- és éles alkalmazások hitelesítéséről további információt Biztonságos hitelesítési folyamatokcímű témakörben talál.
SQL Server Express LocalDB (helyi adatbáziskezelő szoftver)
A LocalDB az SQL Server Express adatbázismotor egyszerűsített verziója, amely programfejlesztésre szolgál. A LocalDB igény szerint indul el, és felhasználói módban fut, így nincs összetett konfiguráció. Alapértelmezés szerint a LocalDB-adatbázis fájlokat hoz létre *.mdf a C:\Users\<user>\ könyvtárban.
A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).
Kattintson a jobb gombbal a
Movietáblára, és válassza Nézettervező:
Figyelje meg a
IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezettIDtulajdonságot.Kattintson a jobb gombbal a
Movietáblára, és válassza Adatok megtekintése:
Az adatbázis üzembe helyezése
Hozzon létre egy új osztályt SeedData a Models mappában a következő kóddal:
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();
}
}
}
Ha vannak filmek az adatbázisban, a seed inicializáló befejezi a működését, és nem ad hozzá filmeket.
if (context.Movie.Any())
{
return;
}
Add meg a mag inicializálót
Frissítse a Program.cs következő kiemelt kóddal:
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();
Az előző kódban Program.cs a következő módon lett módosítva:
- Kérje le az adatbázis-környezetpéldányt a függőséginjektálási (DI) tárolóból.
- Hívja meg a metódust
seedData.Initialize, és adja át neki az adatbázis-környezetpéldányt. - Amikor a seed-függvény befejeződik, távolítsa el a kontextust. A felhasználói utasítás biztosítja, hogy a környezet el legyen osztva.
A következő kivétel akkor fordul elő, ha Update-Database nem futtatták:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Az alkalmazás tesztelése
Törölje az adatbázisban lévő összes rekordot, hogy a kezdő metódus fusson. Állítsa le és indítsa el az alkalmazást az adatbázis üzembe helyezése érdekében. Ha az adatbázis nincs feltöltve, helyezzen egy töréspontot a if (context.Movie.Any())-ra, és lépjen végig a kódon.
Az alkalmazás a kiemelt adatokat jeleníti meg:
Következő lépések
A RazorPagesMovieContext objektum kezeli az adatbázishoz való csatlakozás és Movie objektumok adatbázisrekordokhoz való leképezésének feladatát. Az adatbázis-környezet a Dependency Injection tárolóban van regisztrálva Program.cs.
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();
A ASP.NET Core Configuration rendszer beolvassa a ConnectionString kulcsot. A helyi fejlesztés során a beállítások lekérik a kapcsolati sztringet a appsettings.json fájlból.
A létrehozott kapcsolati sztring a következő JSON-hoz hasonló:
{
"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
Ez a cikk egy helyi adatbázist használ, amely nem igényli a felhasználó hitelesítését. A termelésben használt alkalmazásoknak az elérhető legbiztonságosabb hitelesítési folyamatot kell használniuk. Az üzembe helyezett teszt- és éles alkalmazások hitelesítéséről további információt Biztonságos hitelesítési folyamatokcímű témakörben talál.
SQL Server Express LocalDB (helyi adatbáziskezelő szoftver)
A LocalDB az SQL Server Express adatbázismotor egyszerűsített verziója, amely programfejlesztésre szolgál. A LocalDB igény szerint indul el, és felhasználói módban fut, így nincs összetett konfiguráció. Alapértelmezés szerint a LocalDB-adatbázis fájlokat hoz létre *.mdf a C:\Users\<user>\ könyvtárban.
A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).
Kattintson a jobb gombbal a
Movietáblára, és válassza Nézettervező:
Figyelje meg a
IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezettIDtulajdonságot.Kattintson a jobb gombbal a
Movietáblára, és válassza Adatok megtekintése:
Az adatbázis üzembe helyezése
Hozzon létre egy új osztályt SeedData a Models mappában a következő kóddal:
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();
}
}
}
Ha vannak filmek az adatbázisban, a seed inicializáló befejezi a működését, és nem ad hozzá filmeket.
if (context.Movie.Any())
{
return;
}
Add meg a mag inicializálót
Frissítse a Program.cs következő kiemelt kóddal:
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();
Az előző kódban Program.cs a következő módon lett módosítva:
- Kérje le az adatbázis-környezetpéldányt a függőséginjektálási (DI) tárolóból.
- Hívja meg a metódust
seedData.Initialize, és adja át neki az adatbázis-környezetpéldányt. - Amikor a seed-függvény befejeződik, távolítsa el a kontextust. A felhasználói utasítás biztosítja, hogy a környezet el legyen osztva.
A következő kivétel akkor fordul elő, ha Update-Database nem futtatták:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Az alkalmazás tesztelése
Törölje az adatbázisban lévő összes rekordot, hogy a kezdő metódus fusson. Állítsa le és indítsa el az alkalmazást az adatbázis üzembe helyezése érdekében. Ha az adatbázis nincs feltöltve, helyezzen egy töréspontot a if (context.Movie.Any())-ra, és lépjen végig a kódon.
Az alkalmazás a kiemelt adatokat jeleníti meg:
Következő lépések
A RazorPagesMovieContext objektum kezeli az adatbázishoz való csatlakozás és Movie objektumok adatbázisrekordokhoz való leképezésének feladatát. Az adatbázis-környezet a Dependency Injection tárolóban van regisztrálva Program.cs.
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();
A ASP.NET Core Configuration rendszer beolvassa a ConnectionString kulcsot. A helyi fejlesztés során a beállítások lekérik a kapcsolati sztringet a appsettings.json fájlból.
A létrehozott kapcsolati sztring a következő JSON-hoz hasonló:
{
"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
Ez a cikk egy helyi adatbázist használ, amely nem igényli a felhasználó hitelesítését. A termelésben használt alkalmazásoknak az elérhető legbiztonságosabb hitelesítési folyamatot kell használniuk. Az üzembe helyezett teszt- és éles alkalmazások hitelesítéséről további információt Biztonságos hitelesítési folyamatokcímű témakörben talál.
SQL Server Express LocalDB (helyi adatbáziskezelő szoftver)
A LocalDB az SQL Server Express adatbázismotor egyszerűsített verziója, amely programfejlesztésre szolgál. A LocalDB igény szerint indul el, és felhasználói módban fut, így nincs összetett konfiguráció. Alapértelmezés szerint a LocalDB-adatbázis fájlokat hoz létre *.mdf a C:\Users\<user>\ könyvtárban.
A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).
Kattintson a jobb gombbal a
Movietáblára, és válassza Nézettervező:
Figyelje meg a
IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezettIDtulajdonságot.Kattintson a jobb gombbal a
Movietáblára, és válassza Adatok megtekintése:
Az adatbázis üzembe helyezése
Hozzon létre egy új osztályt SeedData a Models mappában a következő kóddal:
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();
}
}
}
}
Ha vannak filmek az adatbázisban, a seed inicializáló befejezi a működését, és nem ad hozzá filmeket.
if (context.Movie.Any())
{
return;
}
Add meg a mag inicializálót
Frissítse a Program.cs következő kiemelt kóddal:
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();
Az előző kódban Program.cs a következő módon lett módosítva:
- Kérje le az adatbázis-környezetpéldányt a függőséginjektálási (DI) tárolóból.
- Hívja meg a metódust
seedData.Initialize, és adja át neki az adatbázis-környezetpéldányt. - Amikor a seed-függvény befejeződik, távolítsa el a kontextust. A felhasználói utasítás biztosítja, hogy a környezet el legyen osztva.
A következő kivétel akkor fordul elő, ha Update-Database nem futtatták:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Az alkalmazás tesztelése
Törölje az adatbázisban lévő összes rekordot, hogy a kezdő metódus fusson. Állítsa le és indítsa el az alkalmazást az adatbázis üzembe helyezése érdekében. Ha az adatbázis nincs feltöltve, helyezzen egy töréspontot a if (context.Movie.Any())-ra, és lépjen végig a kódon.
Az alkalmazás a kiemelt adatokat jeleníti meg:
Következő lépések
Mintakód megtekintése vagy letöltése (hogyan töltsük le).
A RazorPagesMovieContext objektum kezeli az adatbázishoz való csatlakozás és Movie objektumok adatbázisrekordokhoz való leképezésének feladatát. Az adatbázis-környezetet regisztrálják a Dependency Injection tárolóban a ConfigureServices metódussal Startup.cs.
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
A ASP.NET Core Configuration rendszer beolvassa a ConnectionString kulcsot. A helyi fejlesztés során a beállítások lekérik a kapcsolati sztringet a appsettings.json fájlból.
A létrehozott kapcsolati sztring a következő JSON-hoz hasonló:
{
"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
Ez a cikk egy helyi adatbázist használ, amely nem igényli a felhasználó hitelesítését. A termelésben használt alkalmazásoknak az elérhető legbiztonságosabb hitelesítési folyamatot kell használniuk. Az üzembe helyezett teszt- és éles alkalmazások hitelesítéséről további információt Biztonságos hitelesítési folyamatokcímű témakörben talál.
SQL Server Express LocalDB (helyi adatbáziskezelő szoftver)
A LocalDB az SQL Server Express adatbázismotor egyszerűsített verziója, amely programfejlesztésre szolgál. A LocalDB igény szerint indul el, és felhasználói módban fut, így nincs összetett konfiguráció. Alapértelmezés szerint a LocalDB-adatbázis fájlokat hoz létre *.mdf a C:\Users\<user>\ könyvtárban.
A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).
Kattintson a jobb gombbal a
Movietáblára, és válassza Nézettervező:
Figyelje meg a
IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezettIDtulajdonságot.Kattintson a jobb gombbal a
Movietáblára, és válassza Adatok megtekintése:
Az adatbázis üzembe helyezése
Hozzon létre egy új osztályt SeedData a Models mappában a következő kóddal:
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();
}
}
}
}
Ha vannak filmek az adatbázisban, a seed inicializáló befejezi a működését, és nem ad hozzá filmeket.
if (context.Movie.Any())
{
return;
}
Add meg a mag inicializálót
Cserélje le a Program.cs tartalmát a következő kódra:
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>();
});
}
}
Az előző kódban a Main metódus módosítva lett, hogy a következőket tegye:
- Adatbázis-környezetpéldány lekérése a függőséginjektálási tárolóból.
- Hívja meg a metódust
seedData.Initialize, és adja át neki az adatbázis-környezetpéldányt. - Amikor a seed-függvény befejeződik, távolítsa el a kontextust. A felhasználói utasítás biztosítja, hogy a környezet el legyen osztva.
A következő kivétel akkor fordul elő, ha Update-Database nem futtatták:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Az alkalmazás tesztelése
Törölje az adatbázis összes rekordjait. A törlési hivatkozások használata a böngészőben vagy az SSOX-ból
Kényszerítse az alkalmazást az inicializálásra az osztály metódusainak
Startupmeghívásával, hogy a kezdő metódus fusson. Az inicializálás kényszerítéséhez az IIS Expresst le kell állítani és újra kell indítani. Állítsa le és indítsa újra az IIS-t az alábbi módszerek bármelyikével:Kattintson a jobb gombbal az IIS Express rendszertálca ikonra az értesítési területen, és válassza a Kilépés vagy a Hely leállítása lehetőséget:
Ha az alkalmazás nem hibakeresési módban fut, nyomja le az F5 billentyűt a hibakeresési módban való futtatáshoz.
Ha az alkalmazás hibakeresési módban van, állítsa le a hibakeresőt, és nyomja le az F5 billentyűt.
Az alkalmazás a kiemelt adatokat jeleníti meg:
Következő lépések
Mintakód megtekintése vagy letöltése (hogyan töltsük le).
A RazorPagesMovieContext objektum kezeli az adatbázishoz való csatlakozás és Movie objektumok adatbázisrekordokhoz való leképezésének feladatát. Az adatbázis-környezetet regisztrálják a Dependency Injection tárolóban a ConfigureServices metódussal Startup.cs.
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
A ASP.NET Core Configuration rendszer beolvassa a ConnectionString kulcsot. A helyi fejlesztés során a beállítások lekérik a kapcsolati sztringet a appsettings.json fájlból.
A létrehozott kapcsolati sztring a következőhöz hasonló lesz:
{
"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
Ez a cikk egy helyi adatbázist használ, amely nem igényli a felhasználó hitelesítését. A termelésben használt alkalmazásoknak az elérhető legbiztonságosabb hitelesítési folyamatot kell használniuk. Az üzembe helyezett teszt- és éles alkalmazások hitelesítéséről további információt Biztonságos hitelesítési folyamatokcímű témakörben talál.
SQL Server Express LocalDB (helyi adatbáziskezelő szoftver)
A LocalDB az SQL Server Express adatbázismotor egyszerűsített verziója, amely programfejlesztésre szolgál. A LocalDB igény szerint indul el, és felhasználói módban fut, így nincs összetett konfiguráció. Alapértelmezés szerint a LocalDB-adatbázis fájlokat hoz létre *.mdf a C:\Users\<user>\ könyvtárban.
A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).
Kattintson a jobb gombbal a
Movietáblára, és válassza Nézettervező:
Figyelje meg a IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezett ID tulajdonságot.
Kattintson a jobb gombbal a
Movietáblára, és válassza Adatok megtekintése:
Az adatbázis üzembe helyezése
Hozzon létre egy új osztályt SeedData a Models mappában a következő kóddal:
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();
}
}
}
}
Ha vannak filmek az adatbázisban, a seed inicializáló befejezi a működését, és nem ad hozzá filmeket.
if (context.Movie.Any())
{
return;
}
Add meg a mag inicializálót
Cserélje le a Program.cs tartalmát a következő kódra:
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>();
});
}
}
Az előző kódban a Main metódus módosítva lett, hogy a következőket tegye:
- Adatbázis-környezetpéldány lekérése a függőséginjektálási tárolóból.
- Hívja meg a metódust
seedData.Initialize, és adja át neki az adatbázis-környezetpéldányt. - Amikor a seed-függvény befejeződik, távolítsa el a kontextust. A felhasználói utasítás biztosítja, hogy a környezet el legyen osztva.
A következő kivétel akkor fordul elő, ha Update-Database nem futtatták:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Az alkalmazás tesztelése
Törölje az adatbázis összes rekordjait. Használja a böngészőben vagy az SSOX-ból származó törlési hivatkozásokat.
Kényszerítse az alkalmazást az inicializálásra az osztály metódusainak
Startupmeghívásával, hogy a kezdő metódus fusson. Az inicializálás kényszerítéséhez az IIS Expresst le kell állítani és újra kell indítani. Állítsa le és indítsa újra az IIS-t az alábbi módszerek bármelyikével:Kattintson a jobb gombbal az IIS Express rendszertálca ikonra az értesítési területen, és koppintson Kilépés vagy Webhely leállítása:
- Ha az alkalmazás nem hibakeresési módban fut, nyomja le az F5 billentyűt a hibakeresési módban való futtatáshoz.
- Ha az alkalmazás hibakeresési módban van, állítsa le a hibakeresőt, és nyomja le az F5 billentyűt.
Az alkalmazás a kiemelt adatokat jeleníti meg: