Freigeben über


Teil 5, Arbeiten mit einer Datenbank in einer ASP.NET Core MVC-App

Hinweis

Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 10-Version dieses Artikels.

Warnung

Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie unter .NET und .NET Core Support Policy. Die aktuelle Version finden Sie in der .NET 10-Version dieses Artikels.

Einleitung

Dieser Teil der Lernprogrammreihe konzentriert sich auf die Arbeit mit einer SQL-Datenbank in Ihrer ASP.NET Core MVC-Anwendung.

Sie lernen Folgendes:

  • Registrieren und konfigurieren Sie den Entity Framework Core Datenbankkontext für Ihre ASP.NET Core MVC-App.
  • Verwenden Sie Datenbank-Connection-Strings zur lokalen Entwicklung.
  • Verwenden Sie SQL Server Express LocalDB für die Entwicklung und überprüfen Sie Ihre Datenbank und Daten mithilfe von SQL Server Objekt-Explorer.
  • Seeden Sie Ihre Datenbank mit anfänglichen Beispieldaten.

Voraussetzung

In diesem Lernprogramm wird eine Datenbank verwendet, die Sie im vorherigen Schritt eingerichtet haben: Part 4, fügen Sie einer ASP.NET Core MVC-App ein Modell hinzu.

Arbeiten mit dem Datenbankkontext

Das MvcMovieContext-Objekt übernimmt die Aufgabe der Herstellung der Verbindung mit der Datenbank und Zuordnung von Movie-Objekten zu Datensätzen in der Datenbank. Der Datenbankkontext wird beim Dependency Injection-Container in der Datei Program.cs registriert:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

Das System ASP.NET Core Configuration liest den Schlüssel ConnectionString. Für die lokale Entwicklung wird die Verbindungszeichenfolge aus der Datei appsettings.json abgerufen:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Warnung

In diesem Artikel wird eine lokale Datenbank verwendet, für die keine Authentifizierung des Benutzers erforderlich ist. Produktions-Apps sollten den sichersten verfügbaren Ablauf für die Authentifizierung verwenden. Weitere Informationen zur Authentifizierung für bereitgestellte Test- und Produktions-Apps finden Sie unter Sichere Authentifizierungsflows.

SQL Server Express LocalDB

LocalDB:

  • Ist eine einfache Version der SQL Server Express Datenbank-Engine, die standardmäßig mit Visual Studio installiert ist.
  • Beginnt bei Bedarf mit einer Verbindungszeichenfolge.
  • Ist für die Programmentwicklung geeignet. Wird im Benutzermodus ausgeführt, sodass keine komplexe Konfiguration anfällt.
  • Erstellt standardmäßig MDF-Dateien im Verzeichnis C:/Benutzer/{Benutzer} .

Untersuchen der Datenbank

Öffnen Sie im Menü ViewSQL Server Objekt-Explorer (SSOX).

Klicken Sie mit der rechten Maustaste auf die Tabelle Movie (dbo.Movie) und wählen Sie > Entwurfsansicht anzeigen aus.

Klicken Sie mit der rechten Maustaste auf die Tabelle 'Movie', um den Ansichts-Designer anzuzeigen > .

Die Filmtabelle wird in Designer geöffnet.

Beachten Sie das Schlüsselsymbol neben ID. EF macht die Eigenschaft mit dem Namen ID standardmäßig zum Primärschlüssel.

Klicken Sie mit der rechten Maustaste auf die Movie Tabelle > Daten anzeigen.

Klicken Sie mit der rechten Maustaste auf die Filmtabelle > und wählen Sie

Filmtabelle öffnen, keine Daten vorhanden.

Datenbank seeden

Erstellen Sie eine neue Klasse namens SeedData im Ordner Models. Ersetzen Sie den generierten Code durch den folgenden:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Wenn in der Datenbank Filme vorhanden sind, führt der Seeding-Initialisierer eine Rückkehr durch, und es werden keine Filme hinzugefügt.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Den Seed-Initialisierer hinzufügen

Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code. Der neue Code ist hervorgehoben.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.MapStaticAssets();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}")
    .WithStaticAssets();

app.Run();

Testen der App. Erzwingen Sie die Initialisierung der App, indem Sie den Code in der Datei Program.cs aufrufen, damit die Seed-Methode ausgeführt wird. Um die Initialisierung zu erzwingen, schließen Sie das Eingabeaufforderungsfenster, das von Visual Studio geöffnet wurde, und starten Sie es erneut, indem Sie STRG+F5 drücken.

Die App zeigt die Seeddaten.

MVC Movie-App wird in Microsoft Edge mit Filmdaten geöffnet.

Eine Aktualisierung der Movie Tabelle zeigt die gleichen Daten an.

Die Filmtabelle enthält Seeddaten.

Hinweis

Sie können unter Umständen keine Dezimaltrennzeichen in Dezimalfelder eingeben. Zur Unterstützung der jQuery-Validierung für nicht englische Gebietsschemas, in denen ein Komma („,“) als Dezimaltrennzeichen verwendet wird, und Nicht-US-englische Datums- und Uhrzeitformate müssen Sie Schritte zur Globalisierung Ihrer App ausführen. Sehen Sie sich diesen GitHub Kommentar 4076 an, für Anweisungen zum Hinzufügen von Dezimalkomma.

Einleitung

Dieser Teil der Lernprogrammreihe konzentriert sich auf die Arbeit mit einer SQL-Datenbank in Ihrer ASP.NET Core MVC-Anwendung.

Sie lernen Folgendes:

  • Registrieren und konfigurieren Sie den Entity Framework Core Datenbankkontext für Ihre ASP.NET Core MVC-App.
  • Verwenden Sie Datenbank-Connection-Strings zur lokalen Entwicklung.
  • Verwenden Sie SQL Server Express LocalDB für die Entwicklung und überprüfen Sie Ihre Datenbank und Daten mithilfe von SQL Server Objekt-Explorer.
  • Seeden Sie Ihre Datenbank mit anfänglichen Beispieldaten.

Voraussetzung

In diesem Lernprogramm wird eine Datenbank verwendet, die Sie im vorherigen Schritt eingerichtet haben: Part 4, fügen Sie einer ASP.NET Core MVC-App ein Modell hinzu.

Arbeiten mit dem Datenbankkontext

Das MvcMovieContext-Objekt übernimmt die Aufgabe der Herstellung der Verbindung mit der Datenbank und Zuordnung von Movie-Objekten zu Datensätzen in der Datenbank. Der Datenbankkontext wird beim Dependency Injection-Container in der Datei Program.cs registriert:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

Das System ASP.NET Core Configuration liest den Schlüssel ConnectionString. Für die lokale Entwicklung wird die Verbindungszeichenfolge aus der Datei appsettings.json abgerufen:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Warnung

In diesem Artikel wird eine lokale Datenbank verwendet, für die keine Authentifizierung des Benutzers erforderlich ist. Produktions-Apps sollten den sichersten verfügbaren Ablauf für die Authentifizierung verwenden. Weitere Informationen zur Authentifizierung für bereitgestellte Test- und Produktions-Apps finden Sie unter Sichere Authentifizierungsflows.

SQL Server Express LocalDB

LocalDB:

  • Ist eine einfache Version der SQL Server Express Datenbank-Engine, die standardmäßig mit Visual Studio installiert ist.
  • Beginnt bei Bedarf mit einer Verbindungszeichenfolge.
  • Ist für die Programmentwicklung geeignet. Wird im Benutzermodus ausgeführt, sodass keine komplexe Konfiguration anfällt.
  • Erstellt standardmäßig MDF-Dateien im Verzeichnis C:/Benutzer/{Benutzer} .

Untersuchen der Datenbank

Öffnen Sie im Menü ViewSQL Server Objekt-Explorer (SSOX).

Klicken Sie mit der rechten Maustaste auf die Tabelle Movie (dbo.Movie) und wählen Sie > Entwurfsansicht anzeigen aus.

Klicken mit der rechten Maustaste auf die Tabelle „Movie“ > „Ansichts-Designer“

Movie-Tabelle im Designer öffnen

Beachten Sie das Schlüsselsymbol neben ID. EF macht die Eigenschaft mit dem Namen ID standardmäßig zum Primärschlüssel.

Klicken Sie mit der rechten Maustaste auf die Movie Tabelle > Daten anzeigen.

Klicken mit der rechten Maustaste auf die Tabelle „Movie“ > „Daten anzeigen“

Geöffnete Tabelle „Movie“ mit Tabellendaten

Datenbank seeden

Erstellen Sie eine neue Klasse namens SeedData im Ordner Models. Ersetzen Sie den generierten Code durch den folgenden:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Wenn in der Datenbank Filme vorhanden sind, führt der Seeding-Initialisierer eine Rückkehr durch, und es werden keine Filme hinzugefügt.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Den Seed-Initialisierer hinzufügen

Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code. Der neue Code ist hervorgehoben.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.MapStaticAssets();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Löschen Sie alle Datensätze in der Datenbank. Sie können dies mit den Lösch-Links im Browser oder direkt aus SSOX tun.

Testen der App. Erzwingen Sie die Initialisierung der App, indem Sie den Code in der Datei Program.cs aufrufen, damit die Seed-Methode ausgeführt wird. Um die Initialisierung zu erzwingen, schließen Sie das Eingabeaufforderungsfenster, das von Visual Studio geöffnet wurde, und starten Sie es erneut, indem Sie STRG+F5 drücken.

Die App zeigt die Seeddaten.

MVC Movie-App wird in Microsoft Edge mit Filmdaten geöffnet

Hinweis

Sie können unter Umständen keine Dezimaltrennzeichen in Dezimalfelder eingeben. Zur Unterstützung der jQuery-Validierung für nicht englische Gebietsschemas, in denen ein Komma („,“) als Dezimaltrennzeichen verwendet wird, und Nicht-US-englische Datums- und Uhrzeitformate müssen Sie Schritte zur Globalisierung Ihrer App ausführen. Sehen Sie sich diesen GitHub Kommentar 4076 an, für Anweisungen zum Hinzufügen von Dezimalkomma.

Einleitung

Dieser Teil der Lernprogrammreihe konzentriert sich auf die Arbeit mit einer SQL-Datenbank in Ihrer ASP.NET Core MVC-Anwendung.

Sie lernen Folgendes:

  • Registrieren und konfigurieren Sie den Entity Framework Core Datenbankkontext für Ihre ASP.NET Core MVC-App.
  • Verwenden Sie Datenbank-Connection-Strings zur lokalen Entwicklung.
  • Verwenden Sie SQL Server Express LocalDB für die Entwicklung und überprüfen Sie Ihre Datenbank und Daten mithilfe von SQL Server Objekt-Explorer.
  • Seeden Sie Ihre Datenbank mit anfänglichen Beispieldaten.

Voraussetzung

In diesem Lernprogramm wird eine Datenbank verwendet, die Sie im vorherigen Schritt eingerichtet haben: Part 4, fügen Sie einer ASP.NET Core MVC-App ein Modell hinzu.

Arbeiten mit dem Datenbankkontext

Das MvcMovieContext-Objekt übernimmt die Aufgabe der Herstellung der Verbindung mit der Datenbank und Zuordnung von Movie-Objekten zu Datensätzen in der Datenbank. Der Datenbankkontext wird beim Dependency Injection-Container in der Datei Program.cs registriert:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

Das System ASP.NET Core Configuration liest den Schlüssel ConnectionString. Für die lokale Entwicklung wird die Verbindungszeichenfolge aus der Datei appsettings.json abgerufen:

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

Warnung

In diesem Artikel wird eine lokale Datenbank verwendet, für die keine Authentifizierung des Benutzers erforderlich ist. Produktions-Apps sollten den sichersten verfügbaren Ablauf für die Authentifizierung verwenden. Weitere Informationen zur Authentifizierung für bereitgestellte Test- und Produktions-Apps finden Sie unter Sichere Authentifizierungsflows.

SQL Server Express LocalDB

LocalDB:

  • Ist eine einfache Version der SQL Server Express Datenbank-Engine, die standardmäßig mit Visual Studio installiert ist.
  • Beginnt bei Bedarf mit einer Verbindungszeichenfolge.
  • Ist für die Programmentwicklung geeignet. Wird im Benutzermodus ausgeführt, sodass keine komplexe Konfiguration anfällt.
  • Erstellt standardmäßig MDF-Dateien im Verzeichnis C:/Benutzer/{Benutzer} .

Untersuchen der Datenbank

Öffnen Sie im Menü ViewSQL Server Objekt-Explorer (SSOX).

Klicken Sie mit der rechten Maustaste auf die Tabelle Movie (dbo.Movie) und wählen Sie > Entwurfsansicht anzeigen aus.

Klicken mit der rechten Maustaste auf die Tabelle „Movie“ > „Ansichts-Designer“

Movie-Tabelle im Designer öffnen

Beachten Sie das Schlüsselsymbol neben ID. EF macht die Eigenschaft mit dem Namen ID standardmäßig zum Primärschlüssel.

Klicken Sie mit der rechten Maustaste auf die Movie Tabelle > Daten anzeigen.

Klicken mit der rechten Maustaste auf die Tabelle „Movie“ > „Daten anzeigen“

Geöffnete Tabelle „Movie“ mit Tabellendaten

Datenbank seeden

Erstellen Sie eine neue Klasse namens SeedData im Ordner Models. Ersetzen Sie den generierten Code durch den folgenden:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Wenn in der Datenbank Filme vorhanden sind, wird der Initialisierer des Seedings zurückgegeben, und es werden keine Filme hinzugefügt.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Hinzufügen des Seed-Initialisierers

Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code. Der neue Code ist hervorgehoben.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Löschen Sie alle Datensätze in der Datenbank. Sie können dies mit den Lösch-Links im Browser oder direkt aus SSOX tun.

Testen der App. Erzwingen Sie die Initialisierung der App, indem Sie den Code in der Datei Program.cs aufrufen, damit die Seed-Methode ausgeführt wird. Um die Initialisierung zu erzwingen, schließen Sie das Eingabeaufforderungsfenster, das von Visual Studio geöffnet wurde, und starten Sie es erneut, indem Sie STRG+F5 drücken.

Die App zeigt die Seeddaten.

MVC Movie-App wird in Microsoft Edge mit Filmdaten geöffnet

Hinweis

Sie können unter Umständen keine Dezimaltrennzeichen in Dezimalfelder eingeben. Zur Unterstützung der jQuery-Validierung für nicht englische Gebietsschemas, in denen ein Komma („,“) als Dezimaltrennzeichen verwendet wird, und Nicht-US-englische Datums- und Uhrzeitformate müssen Sie Schritte zur Globalisierung Ihrer App ausführen. Sehen Sie sich diesen GitHub Kommentar 4076 an, für Anweisungen zum Hinzufügen von Dezimalkomma.

Einleitung

Dieser Teil der Lernprogrammreihe konzentriert sich auf die Arbeit mit einer SQL-Datenbank in Ihrer ASP.NET Core MVC-Anwendung.

Sie lernen Folgendes:

  • Registrieren und konfigurieren Sie den Entity Framework Core Datenbankkontext für Ihre ASP.NET Core MVC-App.
  • Verwenden Sie Datenbank-Connection-Strings zur lokalen Entwicklung.
  • Verwenden Sie SQL Server Express LocalDB für die Entwicklung und überprüfen Sie Ihre Datenbank und Daten mithilfe von SQL Server Objekt-Explorer.
  • Seeden Sie Ihre Datenbank mit anfänglichen Beispieldaten.

Voraussetzung

In diesem Lernprogramm wird eine Datenbank verwendet, die Sie im vorherigen Schritt eingerichtet haben: Part 4, fügen Sie einer ASP.NET Core MVC-App ein Modell hinzu.

Arbeiten mit dem Datenbankkontext

Das MvcMovieContext-Objekt übernimmt die Aufgabe der Herstellung der Verbindung mit der Datenbank und Zuordnung von Movie-Objekten zu Datensätzen in der Datenbank. Der Datenbankkontext wird beim Dependency Injection-Container in der Datei Program.cs registriert:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

Das System ASP.NET Core Configuration liest den Schlüssel ConnectionString. Für die lokale Entwicklung wird die Verbindungszeichenfolge aus der Datei appsettings.json abgerufen:

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

Warnung

In diesem Artikel wird eine lokale Datenbank verwendet, für die keine Authentifizierung des Benutzers erforderlich ist. Produktions-Apps sollten den sichersten verfügbaren Ablauf für die Authentifizierung verwenden. Weitere Informationen zur Authentifizierung für bereitgestellte Test- und Produktions-Apps finden Sie unter Sichere Authentifizierungsflows.

SQL Server Express LocalDB

LocalDB:

  • Ist eine einfache Version der SQL Server Express Datenbank-Engine, die standardmäßig mit Visual Studio installiert ist.
  • Beginnt bei Bedarf mit einer Verbindungszeichenfolge.
  • Ist für die Programmentwicklung geeignet. Wird im Benutzermodus ausgeführt, sodass keine komplexe Konfiguration anfällt.
  • Erstellt standardmäßig MDF-Dateien im Verzeichnis C:/Benutzer/{Benutzer} .

Untersuchen der Datenbank

Öffnen Sie im Menü ViewSQL Server Objekt-Explorer (SSOX).

Klicken Sie mit der rechten Maustaste auf die Tabelle Movie (dbo.Movie) und wählen Sie > Entwurfsansicht anzeigen aus.

Klicken mit der rechten Maustaste auf die Tabelle „Movie“ > „Ansichts-Designer“

Movie-Tabelle im Designer öffnen

Beachten Sie das Schlüsselsymbol neben ID. EF macht die Eigenschaft mit dem Namen ID standardmäßig zum Primärschlüssel.

Klicken Sie mit der rechten Maustaste auf die Movie Tabelle > Daten anzeigen.

Klicken mit der rechten Maustaste auf die Tabelle „Movie“ > „Daten anzeigen“

Geöffnete Tabelle „Movie“ mit Tabellendaten

Datenbank seeden

Erstellen Sie eine neue Klasse namens SeedData im Ordner Models. Ersetzen Sie den generierten Code durch den folgenden:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Wenn in der Datenbank Filme vorhanden sind, führt der Seeding-Initialisierer eine Rückkehr durch, und es werden keine Filme hinzugefügt.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

<a name=snippet_"si">

Den Seed-Initialisierer hinzufügen

Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code. Der neue Code ist hervorgehoben.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Löschen Sie alle Datensätze in der Datenbank. Sie können dies mit den Lösch-Links im Browser oder direkt aus SSOX tun.

Testen der App. Erzwingen Sie die Initialisierung der App, indem Sie den Code in der Datei Program.cs aufrufen, damit die Seed-Methode ausgeführt wird. Um die Initialisierung zu erzwingen, schließen Sie das Eingabeaufforderungsfenster, das von Visual Studio geöffnet wurde, und starten Sie es erneut, indem Sie STRG+F5 drücken.

Die App zeigt die Seeddaten.

MVC Movie-App wird in Microsoft Edge mit Filmdaten geöffnet

Hinweis

Sie können unter Umständen keine Dezimaltrennzeichen in Dezimalfelder eingeben. Zur Unterstützung der jQuery-Validierung für nicht englische Gebietsschemas, in denen ein Komma („,“) als Dezimaltrennzeichen verwendet wird, und Nicht-US-englische Datums- und Uhrzeitformate müssen Sie Schritte zur Globalisierung Ihrer App ausführen. Sehen Sie sich diesen GitHub Kommentar 4076 an, für Anweisungen zum Hinzufügen von Dezimalkomma.

Einleitung

Dieser Teil der Lernprogrammreihe konzentriert sich auf die Arbeit mit einer SQL-Datenbank in Ihrer ASP.NET Core MVC-Anwendung.

Sie lernen Folgendes:

  • Registrieren und konfigurieren Sie den Entity Framework Core Datenbankkontext für Ihre ASP.NET Core MVC-App.
  • Verwenden Sie Datenbank-Connection-Strings zur lokalen Entwicklung.
  • Verwenden Sie SQL Server Express LocalDB für die Entwicklung und überprüfen Sie Ihre Datenbank und Daten mithilfe von SQL Server Objekt-Explorer.
  • Seeden Sie Ihre Datenbank mit anfänglichen Beispieldaten.

Voraussetzung

In diesem Lernprogramm wird eine Datenbank verwendet, die Sie im vorherigen Schritt eingerichtet haben: Part 4, fügen Sie einer ASP.NET Core MVC-App ein Modell hinzu.

Arbeiten mit dem Datenbankkontext

Das MvcMovieContext-Objekt übernimmt die Aufgabe der Herstellung der Verbindung mit der Datenbank und Zuordnung von Movie-Objekten zu Datensätzen in der Datenbank. Der Datenbankkontext wird beim Dependency Injection-Container in der Datei Program.cs registriert:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

Das System ASP.NET Core Configuration liest den Schlüssel ConnectionString. Für die lokale Entwicklung wird die Verbindungszeichenfolge aus der Datei appsettings.json abgerufen:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Warnung

In diesem Artikel wird eine lokale Datenbank verwendet, für die keine Authentifizierung des Benutzers erforderlich ist. Produktions-Apps sollten den sichersten verfügbaren Ablauf für die Authentifizierung verwenden. Weitere Informationen zur Authentifizierung für bereitgestellte Test- und Produktions-Apps finden Sie unter Sichere Authentifizierungsflows.

SQL Server Express LocalDB

LocalDB:

  • Ist eine einfache Version der SQL Server Express Datenbank-Engine, die standardmäßig mit Visual Studio installiert ist.
  • Beginnt bei Bedarf mit einer Verbindungszeichenfolge.
  • Ist für die Programmentwicklung geeignet. Wird im Benutzermodus ausgeführt, sodass keine komplexe Konfiguration anfällt.
  • Erstellt standardmäßig MDF-Dateien im Verzeichnis C:/Benutzer/{Benutzer} .

Datenbank seeden

Erstellen Sie eine neue Klasse namens SeedData im Ordner Models. Ersetzen Sie den generierten Code durch den folgenden:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcMovieContext(
                serviceProvider.GetRequiredService<
                    DbContextOptions<MvcMovieContext>>()))
            {
                // Look for any movies.
                if (context.Movie.Any())
                {
                    return;   // DB has been seeded
                }

                context.Movie.AddRange(
                    new Movie
                    {
                        Title = "When Harry Met Sally",
                        ReleaseDate = DateTime.Parse("1989-2-12"),
                        Genre = "Romantic Comedy",
                        Price = 7.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters ",
                        ReleaseDate = DateTime.Parse("1984-3-13"),
                        Genre = "Comedy",
                        Price = 8.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters 2",
                        ReleaseDate = DateTime.Parse("1986-2-23"),
                        Genre = "Comedy",
                        Price = 9.99M
                    },

                    new Movie
                    {
                        Title = "Rio Bravo",
                        ReleaseDate = DateTime.Parse("1959-4-15"),
                        Genre = "Western",
                        Price = 3.99M
                    }
                );
                context.SaveChanges();
            }
        }
    }
}

Wenn in der Datenbank Filme vorhanden sind, führt der Seeding-Initialisierer eine Rückkehr durch, und es werden keine Filme hinzugefügt.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Den Seed-Initialisierer hinzufügen

Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code. Der neue Code ist hervorgehoben.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Löschen Sie alle Datensätze in der Datenbank. Sie können dies mit den Lösch-Links im Browser oder direkt aus SSOX tun.

Testen der App. Erzwingen Sie die Initialisierung der App, indem Sie den Code in der Datei Program.cs aufrufen, damit die Seed-Methode ausgeführt wird. Um die Initialisierung zu erzwingen, schließen Sie das Eingabeaufforderungsfenster, das von Visual Studio geöffnet wurde, und starten Sie es erneut, indem Sie STRG+F5 drücken.

Die App zeigt die Seeddaten.

MVC Movie-App wird in Microsoft Edge mit Filmdaten geöffnet

Hinweis

Sie können unter Umständen keine Dezimaltrennzeichen in Dezimalfelder eingeben. Zur Unterstützung der jQuery-Validierung für nicht englische Gebietsschemas, in denen ein Komma („,“) als Dezimaltrennzeichen verwendet wird, und Nicht-US-englische Datums- und Uhrzeitformate müssen Sie Schritte zur Globalisierung Ihrer App ausführen. Sehen Sie sich diesen GitHub Kommentar 4076 an, für Anweisungen zum Hinzufügen von Dezimalkomma.

Einleitung

Dieser Teil der Lernprogrammreihe konzentriert sich auf die Arbeit mit einer SQL-Datenbank in Ihrer ASP.NET Core MVC-Anwendung.

Sie lernen Folgendes:

  • Registrieren und konfigurieren Sie den Entity Framework Core Datenbankkontext für Ihre ASP.NET Core MVC-App.
  • Verwenden Sie Datenbank-Connection-Strings zur lokalen Entwicklung.
  • Verwenden Sie SQL Server Express LocalDB für die Entwicklung und überprüfen Sie Ihre Datenbank und Daten mithilfe von SQL Server Objekt-Explorer.
  • Seeden Sie Ihre Datenbank mit anfänglichen Beispieldaten.

Voraussetzung

In diesem Lernprogramm wird eine Datenbank verwendet, die Sie im vorherigen Schritt eingerichtet haben: Part 4, fügen Sie einer ASP.NET Core MVC-App ein Modell hinzu.

Arbeiten mit dem Datenbankkontext

Das MvcMovieContext-Objekt übernimmt die Aufgabe der Herstellung der Verbindung mit der Datenbank und Zuordnung von Movie-Objekten zu Datensätzen in der Datenbank. Der Datenbankkontext wird beim Container Abhängigkeitsinjektion in der ConfigureServices-Methode in der Datei Startup.cs registriert:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}

Das System ASP.NET Core Configuration liest den Schlüssel ConnectionString. Für die lokale Entwicklung wird die Verbindungszeichenfolge aus der Datei appsettings.json abgerufen:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Warnung

In diesem Artikel wird eine lokale Datenbank verwendet, für die keine Authentifizierung des Benutzers erforderlich ist. Produktions-Apps sollten den sichersten verfügbaren Ablauf für die Authentifizierung verwenden. Weitere Informationen zur Authentifizierung für bereitgestellte Test- und Produktions-Apps finden Sie unter Sichere Authentifizierungsflows.

SQL Server Express LocalDB

LocalDB:

  • Ist eine einfache Version der SQL Server Express Datenbank-Engine, die standardmäßig mit Visual Studio installiert ist.
  • Beginnt bei Bedarf mit einer Verbindungszeichenfolge.
  • Ist für die Programmentwicklung geeignet. Wird im Benutzermodus ausgeführt, sodass keine komplexe Konfiguration anfällt.
  • Erstellt standardmäßig MDF-Dateien im Verzeichnis C:/Benutzer/{Benutzer} .

Untersuchen der Datenbank

Öffnen Sie im Menü ViewSQL Server Objekt-Explorer (SSOX).

Menü Ansicht

Klicken Sie mit der rechten Maustaste auf die Tabelle Movie und wählen Sie > Designeransicht aus.

Rechtsklicken Sie auf die Tabelle „Film“ > und wählen Sie Entwurfsansicht

Movie-Tabelle im Designer öffnen

Beachten Sie das Schlüsselsymbol neben ID. EF macht die Eigenschaft mit dem Namen ID standardmäßig zum Primärschlüssel.

Klicken Sie mit der rechten Maustaste auf die Movie Tabelle > Daten anzeigen.

Klicken mit der rechten Maustaste auf die Tabelle „Movie“ > Anzeigen von Daten

Geöffnete Tabelle „Movie“ mit Tabellendaten

Datenbank seeden

Erstellen Sie eine neue Klasse namens SeedData im Ordner Models. Ersetzen Sie den generierten Code durch den folgenden:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcMovieContext(
                serviceProvider.GetRequiredService<
                    DbContextOptions<MvcMovieContext>>()))
            {
                // Look for any movies.
                if (context.Movie.Any())
                {
                    return;   // DB has been seeded
                }

                context.Movie.AddRange(
                    new Movie
                    {
                        Title = "When Harry Met Sally",
                        ReleaseDate = DateTime.Parse("1989-2-12"),
                        Genre = "Romantic Comedy",
                        Price = 7.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters ",
                        ReleaseDate = DateTime.Parse("1984-3-13"),
                        Genre = "Comedy",
                        Price = 8.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters 2",
                        ReleaseDate = DateTime.Parse("1986-2-23"),
                        Genre = "Comedy",
                        Price = 9.99M
                    },

                    new Movie
                    {
                        Title = "Rio Bravo",
                        ReleaseDate = DateTime.Parse("1959-4-15"),
                        Genre = "Western",
                        Price = 3.99M
                    }
                );
                context.SaveChanges();
            }
        }
    }
}

Wenn in der Datenbank Filme vorhanden sind, führt der Seeding-Initialisierer eine Rückkehr durch, und es werden keine Filme hinzugefügt.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Den Seed-Initialisierer hinzufügen

Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code.

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MvcMovie.Data;
using MvcMovie.Models;
using System;

namespace MvcMovie
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;

                try
                {
                    SeedData.Initialize(services);
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occurred seeding the DB.");
                }
            }

            host.Run();

        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

Testen der App.

Löschen Sie alle Datensätze in der Datenbank. Sie können dies mit den Lösch-Links im Browser oder direkt aus SSOX tun.

Zwingen Sie die App zur Initialisierung (rufen Sie dazu die Methoden in der Startup-Klasse auf), damit die Seed-Methode ausgeführt wird. Um die Initialisierung zu erzwingen, muss IIS Express beendet und neu gestartet werden. Hierzu können Sie einen der folgenden Ansätze verwenden:

  • Klicken Sie auf der Taskleiste im Infobereich mit der rechten Maustaste auf das Symbol von IIS Express, und wählen Sie Beenden oder Website beenden aus:

    IIS Express-Symbol auf der Taskleiste

    Kontextmenü

    • Wenn Sie Visual Studio im Nicht-Debugmodus ausgeführt haben, drücken Sie F5, um den Debugmodus auszuführen.
    • Wenn Sie Visual Studio im Debugmodus ausgeführt haben, beenden Sie den Debugger, und drücken Sie F5.

Die App zeigt die Seeddaten.

MVC Movie-App wird in Microsoft Edge mit Filmdaten geöffnet

Hinweis

Sie können unter Umständen keine Dezimaltrennzeichen in Dezimalfelder eingeben. Zur Unterstützung der jQuery-Validierung für nicht englische Gebietsschemas, in denen ein Komma („,“) als Dezimaltrennzeichen verwendet wird, und Nicht-US-englische Datums- und Uhrzeitformate müssen Sie Schritte zur Globalisierung Ihrer App ausführen. Sehen Sie sich diesen GitHub Kommentar 4076 an, für Anweisungen zum Hinzufügen von Dezimalkomma.