Megosztás a következőn keresztül:


A Pages oktatóanyag-sorozatának Razor 4. része

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 .

Készítette: Joe Audette

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.

  1. A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).

    Nézet menü

  2. Kattintson a jobb gombbal a Movie táblára, és válassza Nézettervező:

    A helyi menük megnyílnak a Mozgókép táblában

    Mozgóképtáblák megnyílva a Tervezőben

    Figyelje meg a IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezett ID tulajdonságot.

  3. Kattintson a jobb gombbal a Movie táblára, és válassza Adatok megtekintése:

    Filmtábla megnyitva, megjelenítve a táblaadatok

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:

A mozgókép-alkalmazás meg van nyitva a böngészőben a mozgóképadatok megjelenítésével

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.

  1. A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).

    Nézet menü

  2. Kattintson a jobb gombbal a Movie táblára, és válassza Nézettervező:

    A helyi menük megnyílnak a Mozgókép táblában

    Mozgóképtáblák megnyílva a Tervezőben

    Figyelje meg a IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezett ID tulajdonságot.

  3. Kattintson a jobb gombbal a Movie táblára, és válassza Adatok megtekintése:

    Filmtábla megnyitva, megjelenítve a táblaadatok

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:

A mozgókép-alkalmazás meg van nyitva a böngészőben a mozgóképadatok megjelenítésével

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.

  1. A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).

    Nézet menü

  2. Kattintson a jobb gombbal a Movie táblára, és válassza Nézettervező:

    A helyi menük megnyílnak a Mozgókép táblában

    Mozgóképtáblák megnyílva a Tervezőben

    Figyelje meg a IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezett ID tulajdonságot.

  3. Kattintson a jobb gombbal a Movie táblára, és válassza Adatok megtekintése:

    Filmtábla megnyitva, megjelenítve a táblaadatok

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:

A mozgókép-alkalmazás meg van nyitva a böngészőben a mozgóképadatok megjelenítésével

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.

  1. A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).

    Nézet menü

  2. Kattintson a jobb gombbal a Movie táblára, és válassza Nézettervező:

    A helyi menük megnyílnak a Mozgókép táblában

    Mozgóképtáblák megnyílva a Tervezőben

    Figyelje meg a IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezett ID tulajdonságot.

  3. Kattintson a jobb gombbal a Movie táblára, és válassza Adatok megtekintése:

    Filmtábla megnyitva, megjelenítve a táblaadatok

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:

A mozgókép-alkalmazás meg van nyitva a böngészőben a mozgóképadatok megjelenítésével

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.

  1. A Nézet menüben nyissa meg SQL Server Object Explorer (SSOX).

    Nézet menü

  2. Kattintson a jobb gombbal a Movie táblára, és válassza Nézettervező:

    A helyi menük megnyílnak a Mozgókép táblában

    Mozgóképtáblák megnyílva a Tervezőben

    Figyelje meg a IDmelletti kulcsikont. Alapértelmezés szerint az EF létrehoz egy, az elsődleges kulcsnak nevezett ID tulajdonságot.

  3. Kattintson a jobb gombbal a Movie táblára, és válassza Adatok megtekintése:

    Filmtábla megnyitva, megjelenítve a táblaadatok

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

  1. 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

  2. Kényszerítse az alkalmazást az inicializálásra az osztály metódusainak Startup meghí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:

    1. 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:

      IIS Express rendszertálca ikonja

      Helyi menü

    2. Ha az alkalmazás nem hibakeresési módban fut, nyomja le az F5 billentyűt a hibakeresési módban való futtatáshoz.

    3. 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:

A mozgókép-alkalmazás meg van nyitva a böngészőben a mozgóképadatok megjelenítésével

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).

    Nézet menü

  • Kattintson a jobb gombbal a Movie táblára, és válassza Nézettervező:

    A helyi menük megnyílnak a Mozgókép táblában

    Mozgóképtáblák megnyílva a Tervezőben

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 Movie táblára, és válassza Adatok megtekintése:

    Filmtábla megnyitva, megjelenítve a táblaadatok

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 Startup meghí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:

      IIS Express rendszertálca ikonja

      Helyi menü

      • 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:

Mozgókép-alkalmazás meg van nyitva a Chrome-ban a mozgóképadatok megjelenítéséhez

Következő lépések