Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Warning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Important
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Av Joe Audette
RazorPagesMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i 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.")));
ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar konfigurationen anslutningssträngen appsettings.json från filen.
Den genererade anslutningssträngen liknar följande JSON:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-f2e0482c-952d-4b1c-afe9-a1a3dfe52e55;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.
SQL Server Express LocalDB
LocalDB är en lätt version av SQL Server Express-databasmotorn som är avsedd för programutveckling. LocalDB startar på begäran och körs i användarläge, så det finns ingen komplex konfiguration. Som standard skapar *.mdf LocalDB-databasen filer i C:\Users\<user>\ katalogen.
Öppna SQL Server Object Explorer (SSOX) på menyn Visa.
Högerklicka på tabellen
Movieoch välj View Designer:
Observera nyckelikonen bredvid
ID. Som standard skapar EF en egenskap med namnetIDför den primära nyckeln.Högerklicka på tabellen
Movieoch välj Visa data:
Initiera databasen
Skapa en ny klass med namnet SeedData i mappen Models med följande kod:
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();
}
}
}
Om det finns några filmer i databasen återgår fröinitieraren och inga filmer läggs till.
if (context.Movie.Any())
{
return;
}
Lägg till fröinitierare
Uppdatera Program.cs med följande markerade kod:
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();
I den föregående koden har Program.cs ändrats för att göra följande:
- Hämta en databaskontextinstans från di-containern (dependency injection).
- Anropa metoden
seedData.Initializeoch skicka databaskontextinstansen till den. - Ta bort kontexten när seed-metoden har slutförts. Instruktionen using säkerställer att kontexten tas bort.
Följande undantag inträffar när Update-Database inte har körts:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testa appen
Ta bort alla poster i databasen så att seedmetoden kan köras. Stoppa och starta appen för att seeda databasen. Om databasen inte är seedad, sätt en brytpunkt på if (context.Movie.Any()) och stega igenom koden.
Appen visar de data som har hämtats:
Nästa steg
RazorPagesMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i 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();
ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar konfigurationen anslutningssträngen appsettings.json från filen.
Den genererade anslutningssträngen liknar följande JSON:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.
SQL Server Express LocalDB
LocalDB är en lätt version av SQL Server Express-databasmotorn som är avsedd för programutveckling. LocalDB startar på begäran och körs i användarläge, så det finns ingen komplex konfiguration. Som standard skapar *.mdf LocalDB-databasen filer i C:\Users\<user>\ katalogen.
Öppna SQL Server Object Explorer (SSOX) på menyn Visa.
Högerklicka på tabellen
Movieoch välj View Designer:
Observera nyckelikonen bredvid
ID. Som standard skapar EF en egenskap med namnetIDför den primära nyckeln.Högerklicka på tabellen
Movieoch välj Visa data:
Initiera databasen
Skapa en ny klass med namnet SeedData i mappen Models med följande kod:
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();
}
}
}
Om det finns några filmer i databasen återgår fröinitieraren och inga filmer läggs till.
if (context.Movie.Any())
{
return;
}
Lägg till fröinitierare
Uppdatera Program.cs med följande markerade kod:
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();
I den föregående koden har Program.cs ändrats för att göra följande:
- Hämta en databaskontextinstans från di-containern (dependency injection).
- Anropa metoden
seedData.Initializeoch skicka databaskontextinstansen till den. - Ta bort kontexten när seed-metoden har slutförts. Instruktionen using säkerställer att kontexten tas bort.
Följande undantag inträffar när Update-Database inte har körts:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testa appen
Ta bort alla poster i databasen så att seedmetoden kan köras. Stoppa och starta appen för att seeda databasen. Om databasen inte är seedad, sätt en brytpunkt på if (context.Movie.Any()) och stega igenom koden.
Appen visar de data som har hämtats:
Nästa steg
RazorPagesMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i 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();
ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar konfigurationen anslutningssträngen appsettings.json från filen.
Den genererade anslutningssträngen liknar följande JSON:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.
SQL Server Express LocalDB
LocalDB är en lätt version av SQL Server Express-databasmotorn som är avsedd för programutveckling. LocalDB startar på begäran och körs i användarläge, så det finns ingen komplex konfiguration. Som standard skapar *.mdf LocalDB-databasen filer i C:\Users\<user>\ katalogen.
Öppna SQL Server Object Explorer (SSOX) på menyn Visa.
Högerklicka på tabellen
Movieoch välj View Designer:
Observera nyckelikonen bredvid
ID. Som standard skapar EF en egenskap med namnetIDför den primära nyckeln.Högerklicka på tabellen
Movieoch välj Visa data:
Initiera databasen
Skapa en ny klass med namnet SeedData i mappen Models med följande kod:
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();
}
}
}
Om det finns några filmer i databasen återgår fröinitieraren och inga filmer läggs till.
if (context.Movie.Any())
{
return;
}
Lägg till fröinitierare
Uppdatera Program.cs med följande markerade kod:
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();
I den föregående koden har Program.cs ändrats för att göra följande:
- Hämta en databaskontextinstans från di-containern (dependency injection).
- Anropa metoden
seedData.Initializeoch skicka databaskontextinstansen till den. - Ta bort kontexten när seed-metoden har slutförts. Instruktionen using säkerställer att kontexten tas bort.
Följande undantag inträffar när Update-Database inte har körts:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testa appen
Ta bort alla poster i databasen så att seedmetoden kan köras. Stoppa och starta appen för att seeda databasen. Om databasen inte är seedad, sätt en brytpunkt på if (context.Movie.Any()) och stega igenom koden.
Appen visar de data som har hämtats:
Nästa steg
RazorPagesMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i 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();
ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar konfigurationen anslutningssträngen appsettings.json från filen.
Den genererade anslutningssträngen liknar följande JSON:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.
SQL Server Express LocalDB
LocalDB är en lätt version av SQL Server Express-databasmotorn som är avsedd för programutveckling. LocalDB startar på begäran och körs i användarläge, så det finns ingen komplex konfiguration. Som standard skapar *.mdf LocalDB-databasen filer i C:\Users\<user>\ katalogen.
Öppna SQL Server Object Explorer (SSOX) på menyn Visa.
Högerklicka på tabellen
Movieoch välj View Designer:
Observera nyckelikonen bredvid
ID. Som standard skapar EF en egenskap med namnetIDför den primära nyckeln.Högerklicka på tabellen
Movieoch välj Visa data:
Initiera databasen
Skapa en ny klass med namnet SeedData i mappen Models med följande kod:
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();
}
}
}
}
Om det finns några filmer i databasen återgår fröinitieraren och inga filmer läggs till.
if (context.Movie.Any())
{
return;
}
Lägg till fröinitierare
Uppdatera Program.cs med följande markerade kod:
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();
I den föregående koden har Program.cs ändrats för att göra följande:
- Hämta en databaskontextinstans från di-containern (dependency injection).
- Anropa metoden
seedData.Initializeoch skicka databaskontextinstansen till den. - Ta bort kontexten när seed-metoden har slutförts. Instruktionen using säkerställer att kontexten tas bort.
Följande undantag inträffar när Update-Database inte har körts:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testa appen
Ta bort alla poster i databasen så att seedmetoden kan köras. Stoppa och starta appen för att seeda databasen. Om databasen inte är seedad, sätt en brytpunkt på if (context.Movie.Any()) och stega igenom koden.
Appen visar de data som har hämtats:
Nästa steg
Visa eller ladda ned exempelkod (hur du laddar ned).
RazorPagesMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i ConfigureServices metoden i Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar konfigurationen anslutningssträngen appsettings.json från filen.
Den genererade anslutningssträngen liknar följande JSON:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.
SQL Server Express LocalDB
LocalDB är en lätt version av SQL Server Express-databasmotorn som är avsedd för programutveckling. LocalDB startar på begäran och körs i användarläge, så det finns ingen komplex konfiguration. Som standard skapar *.mdf LocalDB-databasen filer i C:\Users\<user>\ katalogen.
Öppna SQL Server Object Explorer (SSOX) på menyn Visa.
Högerklicka på tabellen
Movieoch välj View Designer:
Observera nyckelikonen bredvid
ID. Som standard skapar EF en egenskap med namnetIDför den primära nyckeln.Högerklicka på tabellen
Movieoch välj Visa data:
Initiera databasen
Skapa en ny klass med namnet SeedData i mappen Models med följande kod:
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();
}
}
}
}
Om det finns några filmer i databasen återgår fröinitieraren och inga filmer läggs till.
if (context.Movie.Any())
{
return;
}
Lägg till fröinitierare
Ersätt innehållet i Program.cs med följande kod:
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>();
});
}
}
I föregående kod Main har metoden ändrats för att göra följande:
- Hämta en databaskontextinstans från containern för beroendeinmatning.
- Anropa metoden
seedData.Initializeoch skicka databaskontextinstansen till den. - Ta bort kontexten när seed-metoden har slutförts. Instruktionen using säkerställer att kontexten tas bort.
Följande undantag inträffar när Update-Database inte har körts:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testa appen
Ta bort alla poster i databasen. Använd borttagningslänkarna i webbläsaren eller från SSOX
Tvinga appen att initiera genom att anropa metoderna i
Startupklassen, så att seed-metoden körs. För att framtvinga initiering måste IIS Express stoppas och startas om. Stoppa och starta om IIS med någon av följande metoder:Högerklicka på ikonen för IIS Express-systemfältet i meddelandefältet och välj Avsluta eller Stoppa webbplats:
Om appen körs i icke-felsökningsläge trycker du på F5 för att köra i felsökningsläge.
Om appen är i felsökningsläge stoppar du felsökningsprogrammet och trycker på F5.
Appen visar de data som har hämtats:
Nästa steg
Visa eller ladda ned exempelkod (hur du laddar ned).
RazorPagesMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i ConfigureServices metoden i Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar konfigurationen anslutningssträngen appsettings.json från filen.
Den genererade anslutningssträngen liknar följande:
{
"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
Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.
SQL Server Express LocalDB
LocalDB är en lätt version av SQL Server Express-databasmotorn som är avsedd för programutveckling. LocalDB startar på begäran och körs i användarläge, så det finns ingen komplex konfiguration. Som standard skapar *.mdf LocalDB-databasen filer i C:\Users\<user>\ katalogen.
Öppna SQL Server Object Explorer (SSOX) på menyn Visa.
Högerklicka på tabellen
Movieoch välj View Designer:
Observera nyckelikonen bredvid ID. Som standard skapar EF en egenskap med namnet ID för den primära nyckeln.
Högerklicka på tabellen
Movieoch välj Visa data:
Initiera databasen
Skapa en ny klass med namnet SeedData i mappen Models med följande kod:
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();
}
}
}
}
Om det finns några filmer i databasen återgår fröinitieraren och inga filmer läggs till.
if (context.Movie.Any())
{
return;
}
Lägg till fröinitierare
Ersätt innehållet i Program.cs med följande kod:
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>();
});
}
}
I föregående kod Main har metoden ändrats för att göra följande:
- Hämta en databaskontextinstans från containern för beroendeinmatning.
- Anropa metoden
seedData.Initializeoch skicka databaskontextinstansen till den. - Ta bort kontexten när seed-metoden har slutförts. Instruktionen using säkerställer att kontexten tas bort.
Följande undantag inträffar när Update-Database inte har körts:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testa appen
Ta bort alla poster i databasen. Använd borttagningslänkarna i webbläsaren eller från SSOX.
Tvinga appen att initiera genom att anropa metoderna i
Startupklassen, så att seed-metoden körs. För att framtvinga initiering måste IIS Express stoppas och startas om. Stoppa och starta om IIS med någon av följande metoder:Högerklicka på ikonen för IIS Express i systemfältet och tryck på Avsluta eller Stoppa webbplatsen:
- Om appen körs i icke-felsökningsläge trycker du på F5 för att köra i felsökningsläge.
- Om appen är i felsökningsläge stoppar du felsökningsprogrammet och trycker på F5.
Appen visar de data som har hämtats:
Nästa steg
ASP.NET Core