Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
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.
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.
Eine Aktualisierung der Movie Tabelle zeigt die gleichen Daten an.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
Klicken Sie mit der rechten Maustaste auf die Tabelle Movie und wählen Sie > Designeransicht aus.
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.
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:
- 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.
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.